我有几个包含单选按钮或复选框的HTML块。
对于某些答案,它显示另一组单选按钮或复选框。
问题是,在选中第三个选项后,如果用户将其选择更改为另一个选项,则不会隐藏子级别选项。
jsFiddler在这里:https://jsfiddle.net/j8n4rhug/
null
$('.form-group-outer > label').find('> input:checkbox, > input:radio').on('click', function() {
el = $(this).closest('.form-group').find('.sub-question');
if(el.length > 0) { el.css('display', 'block'); }
else {
$('.sub-question').css('display', 'none');
$('.sub-question :input[type="radio"], .sub-question :input[type="checkbox"]').each(function(index){
$(this).prop('checked', false);
});
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-step="1" class="tab">
<h3>Question 1</h3>
<div class="form-group form-group-outer">
<label class="container_check">Answer 1
<input type="checkbox" name="q1[]" value="1" class="required">
<span class="checkmark"></span>
</label>
<div class="row sub-question" style="display:none">
<h3 class="col-12">Specify answer for Answer 1</h3>
<div class="row">
<div class="form-group col-4">
<label class="container_radio">1 text
<input type="radio" name="q1_1[]" value="1" class="required">
<span class="checkmark"></span>
</label>
</div>
<div class="form-group col-4">
<label class="container_radio">2 texts
<input type="radio" name="q1_1[]" value="2" class="required">
<span class="checkmark"></span>
</label>
</div>
<div class="form-group col-4">
<label class="container_radio">3 texts
<input type="radio" name="q1_1[]" value="3" class="required">
<span class="checkmark"></span>
</label>
</div>
</div>
</div>
</div>
<div class="form-group form-group-outer">
<label class="container_check">Answer 2
<input type="checkbox" name="q2[]" value="2" class="required">
<span class="checkmark"></span>
</label>
<div class="row sub-question" style="display:none">
<h3 class="col-12">Specify answer for Answer 2</h3>
<div class="row">
<div class="form-group col-4">
<label class="container_check">Textes
<input type="checkbox" name="q2_1[]" value="1">
<span class="checkmark"></span>
</label>
</div>
<div class="form-group col-4">
<label class="container_check">Photos
<input type="checkbox" name="q2_1[]" value="2">
<span class="checkmark"></span>
</label>
</div>
<div class="form-group col-4">
<label class="container_check">Vidéos
<input type="checkbox" name="q2_1[]" value="3">
<span class="checkmark"></span>
</label>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="container_check">Answer 3
<input type="checkbox" name="q3[]" value="3" class="required">
<span class="checkmark"></span>
</label>
</div>
</div>
null
display:none;
创建CSS类is-hidded
,并将其分配给每个子问题“change”
-迭代每个组的checkable以便检索其子问题.toggleClass(“is-Hidden”,this.value)
null
$('.form-group-outer').each(function() {
const $inp = $(this).find(":radio, :checkbox");
$inp.on("change", function() {
$inp.each(function() {
$(this).closest(".form-group").find(".sub-question").toggleClass("is-hidden", !this.checked);
});
});
});
.is-hidden {
display: none;
}
<div data-step="1" class="tab">
<div class="form-group form-group-outer">
<h3>Question 1</h3>
<div class="form-group">
<label class="container_radio">Answer 1 <input type="radio" name="q1[]" value="1" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group">
<label class="container_radio">Answer 2 <input type="radio" name="q1[]" value="2" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group form-group-outer">
<label class="container_radio">Answer 3 <input type="radio" name="q1[]" value="3" class="required"> <span class="checkmark"></span></label>
<div class="row sub-question is-hidden">
<h3 class="col-12">Specify answer for Answer 3</h3>
<div class="form-group col-12">
<label class="container_radio">Yellow <input type="radio" name="q1_1[]" value="1" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group col-12">
<label class="container_radio">Green <input type="radio" name="q1_1[]" value="2" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group col-12">
<label class="container_radio">Red <input type="radio" name="q1_1[]" value="3" class="required"> <span class="checkmark"></span></label>
</div>
</div>
</div>
</div>
<div class="form-group form-group-outer">
<h3>Question 2</h3>
<div class="form-group">
<label class="container_checkbox">Answer 1 <input type="checkbox" name="q2[]" value="1" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group form-group-outer">
<label class="container_checkbox">Answer 2 <input type="checkbox" name="q2[]" value="2" class="required"> <span class="checkmark"></span> </label>
<div class="row sub-question is-hidden">
<h3 class="col-12">Specify answer for Answer 3</h3>
<div class="form-group col-12">
<label class="container_checkbox">Small <input type="checkbox" name="q2_1[]" value="1" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group col-12">
<label class="container_checkbox">Medium <input type="checkbox" name="q2_1[]" value="2" class="required"> <span class="checkmark"></span> </label>
</div>
<div class="form-group col-12">
<label class="container_checkbox">Big <input type="checkbox" name="q2_1[]" value="3" class="required"> <span class="checkmark"></span></label>
</div>
</div>
</div>
</div>
<div class="form-group form-group-outer">
<h3>Question 3</h3>
<div class="form-group">
<label class="container_radio">Answer 1 <input type="radio" name="q3[]" value="1" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group">
<label class="container_radio">Answer 2 <input type="radio" name="q3[]" value="2" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group form-group-outer">
<label class="container_radio">Answer 3 <input type="radio" name="q3[]" value="3" class="required"> <span class="checkmark"></span> </label>
<div class="row sub-question is-hidden">
<h3 class="col-12">Specify answer for Answer 3</h3>
<div class="form-group col-12">
<label class="container_checkbox">Yes <input type="checkbox" name="q3_1[]" value="1" class="required"> <span class="checkmark"></span></label>
</div>
<div class="form-group col-12">
<label class="container_checkbox">No <input type="checkbox" name="q3_1[]" value="2" class="required"> <span class="checkmark"></span></label>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
尝试将每个问题分组到组容器中,并在每个单选或复选框中先选中,只隐藏该组容器中的所有子问题。 只需将单击选择器更改为此。form-group>; label而不是this.form-group-outer>; 标签,请参考下面的示例。
null
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Classes</title>
<link rel="icon" href="classroom.png">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
.sub-question {
display: none;
}
</style>
<script>
$(document).ready(function () {
$('.form-group > label').find('> input:checkbox, > input:radio').on('change', function () {
if (!$(this).closest('.row').hasClass('sub-question')) {
el = $(this).closest('.form-group').find('.sub-question');
if ( $(this).attr('type') == 'radio') {
$(this).closest('.group-container').find('.sub-question').hide();
}
if (el.length > 0 && $(this).is(':checked')) { el.css('display', 'block'); }
else {
$(this).closest('.form-group').find('.sub-question').css('display', 'none');
$(this).closest('.form-group').find('.sub-question :input[type="radio"], .sub-question :input[type="checkbox"]').each(function (index) {
$(this).prop('checked', false);
});
}
}
});
});
</script>
</head>
<body>
<div data-step="1" class="tab">
<div class="group-container">
<h3>Question 1</h3>
<div class="form-group"> <label class="container_radio">Answer 1 <input type="radio" name="q1[]" value="1"
class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group"> <label class="container_radio">Answer 2 <input type="radio" name="q1[]" value="2"
class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group form-group-outer"> <label class="container_radio">Answer 3 <input type="radio"
name="q1[]" value="3" class="required"> <span class="checkmark"></span> </label>
<div class="row sub-question">
<h3 class="col-12">Specify answer for Answer 3</h3>
<div class="form-group col-12"> <label class="container_radio">Yellow <input type="radio" name="q1_1[]"
value="1" class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group col-12"> <label class="container_radio">Green <input type="radio" name="q1_1[]"
value="2" class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group col-12"> <label class="container_radio">Red <input type="radio" name="q1_1[]"
value="3" class="required"> <span class="checkmark"></span> </label> </div>
</div>
</div>
</div>
<hr>
<div class="group-container">
<h3>Question 2</h3>
<div class="form-group"> <label class="container_checkbox">Answer 1 <input type="checkbox" name="q2[]" value="1"
class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group form-group-outer"> <label class="container_checkbox">Answer 2 <input type="checkbox"
name="q2[]" value="2" class="required"> <span class="checkmark"></span> </label>
<div class="row sub-question">
<h3 class="col-12">Specify answer for Answer 3</h3>
<div class="form-group col-12"> <label class="container_checkbox">Small <input type="checkbox"
name="q2_1[]" value="1" class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group col-12"> <label class="container_checkbox">Medium <input type="checkbox"
name="q2_1[]" value="2" class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group col-12"> <label class="container_checkbox">Big <input type="checkbox"
name="q2_1[]" value="3" class="required"> <span class="checkmark"></span> </label> </div>
</div>
</div>
</div>
<hr>
<div class="group-container">
<h3>Question 3</h3>
<div class="form-group"> <label class="container_radio">Answer 1 <input type="radio" name="q3[]" value="1"
class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group"> <label class="container_radio">Answer 2 <input type="radio" name="q3[]" value="2"
class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group form-group-outer"> <label class="container_radio">Answer 3 <input type="radio"
name="q3[]" value="3" class="required"> <span class="checkmark"></span> </label>
<div class="row sub-question">
<h3 class="col-12">Specify answer for Answer 3</h3>
<div class="form-group col-12"> <label class="container_checkbox">Yes <input type="checkbox"
name="q3_1[]" value="1" class="required"> <span class="checkmark"></span> </label> </div>
<div class="form-group col-12"> <label class="container_checkbox">No <input type="checkbox"
name="q3_1[]" value="2" class="required"> <span class="checkmark"></span> </label> </div>
</div>
</div>
</div>
</div>
</body>
</html>