当第一个条件更改时,如何重新显示第二个<div>有条件隐藏的条件?



>我在表单上有两个问题,带有用于Option1Option2的单选按钮,并且正在使用jQuery在隐藏的<div>元素中显示/隐藏其他问题。如果对选项 1 回答"是",则会显示第一个条件<div>,其中包含有关选项 2 的其他问题。如果选项 2 的答案为"是",则会显示第二个条件<div>以及其他问题。

如果用户在选择"是"后将选项 1 问题更改为"否",我将隐藏第二个条件<div>。但是,如果用户再次选择"是"到选项 1,则选项 2 的答案仍然是"是",但第二个条件<div>不会显示,因为没有change事件 - 用户必须再次选择"否"然后选择"是"以显示第二个条件<div>

我不确定如何使用代码处理这个问题,是应该尝试重置单选按钮状态还是以其他方式处理它。任何建议不胜感激。

这是我的jQuery代码,用于显示/隐藏条件:

<script type="text/javascript">
$(document).ready(function () {
$("input[name='Option1']").on ( "change", function() {
if (this.value == "Yes") {
$('#option1Display, #option1Display input').show().removeAttr("disabled");
}
else {
$('#option1Display, #option1Display input,
#option2Display, #option2Display input').hide().attr("disabled", "disabled");
}
});
$("#option1Display, #option1Display input").hide().attr("disabled", "disabled");
});
</script>
<script type="text/javascript">
$(document).ready(function () {
$("input[name='Option2']").on ( "change", function() {
if (this.value == "Yes") {
$('#option2Display, #option2Display input').show().removeAttr("disabled");
}
else {
$('#option2Display, #option2Display input').hide().attr("disabled", "disabled");
}
});
$("#option2Display, #option2Display input").hide().attr("disabled", "disabled");
});
</script>

编辑:对不起,我的标记是通过CMS运行的,该CMS使用各种CSS类生成了许多<div>元素,但是我将尝试使用以下标记重现:

<div>
<label>Option 1 Question</label>
<ol>
<li>   
<label>
<input name="Option1" type="radio" value="No">
No
</label>
</li>
<li>   
<label>
<input name="Option1" type="radio" value="Yes">
Yes
</label>
</li>
</ol>
</div>
<div id="option1Display"><!--jQuery inserts disabled="disabled" and style="display: none;" into <div>-->
<label>Option 2 Question</label>
<ol>
<li>   
<label>
<input name="Option2" type="radio" value="No"><!--jQuery inserts disabled="disabled" and style="display: none;" into <input>-->
No
</label>
</li>
<li>   
<label>
<input name="Option2" type="radio" value="Yes"><!--jQuery inserts disabled="disabled" and style="display: none;" into <input>-->
Yes
</label>
</li>
</ol>
</div>
<div id="option2Display"><!--jQuery inserts disabled="disabled" and style="display: none;" into <div>-->
<!--Additional questions-->
</div>

提问步骤:

  1. 用户为Option1选择"是"。
  2. 向用户显示option1Display,并提出Option2问题。
  3. 用户为Option2选择"是"。
  4. 向用户显示option2Display,并提出其他问题。
  5. 如果用户将其Option1答案更改为"否",则option1Displayoption2Display都将隐藏。
  6. 假设用户从未将Option2答案更改回"否",因此即使option2Display现在再次隐藏,仍会选择"是"。
  7. 如果用户现在再次将其Option1答案更改回"是",则会显示option1Display,并且Option2的答案为"是";但是,除非用户将其答案更改回"否",然后更改为"是",否则option2Display仍然隐藏。

我想妥善处理这个问题。我希望这是清楚的。对不起,如果不是,我不是职业编码员,只是还在学习这些东西。提前谢谢你。

当用户在选项1 的"是"和"否"之间切换时,可以通过在选项 1 更改时检查选项 2 的值来显示option2Display。请注意,我在代码中进行了 2 个进一步的调整:仅显示和隐藏#option1Display#option2Display元素,因为没有必要同时显示和隐藏它们包含的输入元素,并且只有输入设置为禁用和启用,因为disabled属性适用于输入元素,而不是用于例如<div>。请注意,也没有必要为每个click()事件使用单独的$(document).ready()处理程序和单独的脚本标记,所有内容都可以属于单个$(document).ready()事件。

$(document).ready(function() {
$("input[name='Option1']").on("change", function() {
if (this.value == "Yes") {
$('#option1Display').show();
$('#option1Display input').removeAttr("disabled");
if ($("input[name='Option2']:checked").val() == "Yes") {
$('#option2Display').show();
$('#option2Display input').removeAttr("disabled");
}
} else {
$('#option1Display, #option2Display').hide();
$('#option1Display input, #option2Display input').attr("disabled", "disabled");
}
});
$("#option1Display").hide();
$("#option1Display input").attr("disabled", "disabled");
$("input[name='Option2']").on("change", function() {
if (this.value == "Yes") {
$('#option2Display').show();
$('#option2Display input').removeAttr("disabled");
} else {
$('#option2Display').hide();
$('#option2Display input').attr("disabled", "disabled");
}
});
$("#option2Display").hide();
$("#option2Display input").attr("disabled", "disabled");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<label>Option 1 Question</label>
<ol>
<li>
<label>
<input name="Option1" type="radio" value="No">
No
</label>
</li>
<li>
<label>
<input name="Option1" type="radio" value="Yes">
Yes
</label>
</li>
</ol>
</div>
<div id="option1Display">
<label>Option 2 Question</label>
<ol>
<li>
<label>
<input name="Option2" type="radio" value="No">
No
</label>
</li>
<li>
<label>
<input name="Option2" type="radio" value="Yes">
Yes
</label>
</li>
</ol>
</div>
<div id="option2Display">option2Display
</div>

最新更新