Javascript 当一组元素中的所有元素都具有特定值时,如何隐藏表单元素?
在一张表格上,我有3个带是/否选项的问题。如果其中任何一个是肯定的,则出现第四个问题。如果所有3个问题都被重置为“否”,我正在努力使第4个问题再次隐藏起来。这可能是一个不存在的案例,但我更希望彻底 我为每个问题编写了一个单击触发的自定义函数(当value!=“Yes”)来检查其余的值,然后更新第四个值,但它们的值似乎没有得到更新。函数stay='Yes'中的q6、q7和q8。我以为我的函数可以访问live窗体,但我一定做错了什么Javascript 当一组元素中的所有元素都具有特定值时,如何隐藏表单元素?,javascript,jquery,Javascript,Jquery,在一张表格上,我有3个带是/否选项的问题。如果其中任何一个是肯定的,则出现第四个问题。如果所有3个问题都被重置为“否”,我正在努力使第4个问题再次隐藏起来。这可能是一个不存在的案例,但我更希望彻底 我为每个问题编写了一个单击触发的自定义函数(当value!=“Yes”)来检查其余的值,然后更新第四个值,但它们的值似乎没有得到更新。函数stay='Yes'中的q6、q7和q8。我以为我的函数可以访问live窗体,但我一定做错了什么 //question_6exp $("[n
//question_6exp
$("[name = question_6]").change(function()
{
if ( $(this).val() == 'Yes' )
{
$("#question_6exp").show();
$("#question_9").show();
}
else
{
$("#question_6exp").hide();
$("#question_9").hide_question9();
}
});
//question_7exp
$("[name = question_7]").change(function()
{
if ( $(this).val() == 'Yes' )
{
$("#question_7exp").show();
$("#question_9").show();
}
else
{
$("#question_7exp").hide();
$("#question_9").hide_question9();
}
});
//question_8exp
$("[name = question_8]").change(function()
{
if ( $(this).val() == 'Yes' )
{
$("#question_8exp").show();
$("#question_9").show();
}
else
{
$("#question_8exp").hide();
$("#question_9").hide_question9();
}
});
//function hide_question9()
$.fn.hide_question9 = function()
{
var q6 = $("[name = question_6]").val();
var q7 = $("[name = question_7]").val();
var q8 = $("[name = question_8]").val();
//alert('TEST: '+q6+q7+q8);
if ( (q6 == 'No') && (q7 == 'No') && (q8 == 'No') )
{
//$("#question_9").hide();
return this.hide();
}
else
return false;
}
更新:
我根据下面收到的2条回复更新了代码。不幸的是,两者都不起作用。我在3个问题中添加了一个类,以便更容易选择这3个问题。我主要是调整了JoDev的布局。我在else状态中注释掉了代码,并在那里尝试了Aguardientico代码-它当前被注释掉了
$(".temp1").change(function()
{
var myName = $(this).attr('name');
if ( $(this).val() == 'Yes' )
{
$("#question_9").show();
$("#"+myName+"exp").show();
}
else
{//alert($(this).val());
$("#"+myName+"exp").hide();
var alltoNo = true;
$(".temp1").each(function()
{
if ( $(this).val() == 'Yes' )
{
alltoNo = false;
}
//return;
});
if ( alltoNo )
$("[name = question_9]").hide();
/*if ( $("[name=question_6][value=Yes]:checked").length == 0 )
$("[name = question_9]").hide();*/
}
});
这是最简单的方法(只是一个开始)
试试这样的方法: HTML:
不要在属性和值之间放置空格
(name=question_6)
,而不是(name=question_6)
为什么不?为了可读性,我总是这样做,而且效果很好。您可以使用rel
attrib来指示要显示或隐藏的内容。。。或者数据某物
attribs!(为什么不:data show='question\u 1;另一个选择器\u 5'数据隐藏='question\u exp8'
)。。。你明白我的意思吗?我想我明白你在那里做什么了。不幸的是,我在表单上还有其他问题,但命名方案相同,因此我无法使用这样的单个更改函数。但是我可以在我的3个特殊问题中添加一个唯一的类选择器,然后使用.each函数循环它们。我会尝试一下并更新帖子。
$('[name^="question_"]:not([name="question_9"])').change(function() {
if ( $(this).val() == 'Yes' )
{
$("#question_9").show();
$("#question_"+$(this).attr('name').replace('question_', '')+"exp").show();
} else {
$("#question_"+$(this).attr('name').replace('question_', '')+"exp").hide();
var alltoNO = true;
$('[name^="question_"]:not([name="question_9"])').each(function() {
if($(this).val() == 'Yes') {
alltoNo = false;
}
return;
});
if(alltoNo) {
$('[name="question_9"]').hide();
}
}
});
<input type="radio" name="question_6" value="Yes"/> 6 Yes
<input type="radio" name="question_6" value="No"/> 6 No
<input type="radio" name="question_7" value="Yes"/> 7 Yes
<input type="radio" name="question_7" value="No"/> 7 No
<input type="radio" name="question_8" value="Yes"/> 8 Yes
<input type="radio" name="question_8" value="No"/> 8 No
<div id="question_6exp">Q6</div>
<div id="question_7exp">Q7</div>
<div id="question_8exp">Q8</div>
<div id="question_9exp">Q9</div>
$('[name=question_6], [name=question_7], [name=question_8]').change(function(){
if (this.value=="Yes") {
$("#" + this.name + "exp").show();
$("#question_9exp").show();
} else {
$("#" + this.name + "exp").hide();
if ($("[name=question_6][value=Yes]:checked, [name=question_7][value=Yes]:checked, [name=question_8][value=Yes]:checked").length == 0) {
$("#question_9exp").hide();
}
}
});