2013-04-30 50 views
0

我有一个复选框,可以通过下面的功能在选中时显示附加选项。麻烦的是,如果显示的复选框被选中,即使被隐藏,它们仍然被选中。我怎样才能最好地绑定取消勾选与他们被隐藏相同的功能?如何在输入元素隐藏时从复选框中删除检查?

这是许多类似隐藏取消隐藏分组之一。任何帮助表示赞赏!谢谢大家

请注意,我在一个系统中这样做,我不能添加或更改任何HTML ID或类,这就是为什么有一大堆选定的项目。

$("input[id='form_0009_fld_5-0']").click(function() { 
    if($(this).is(':checked')) { 
     $("input[name='form_0009_fld_6-0'],label[for='form_0009_fld_6-0'],input[name='form_0009_fld_6-1'],label[for='form_0009_fld_6-1'],input[name='form_0009_fld_6-2'],label[for='form_0009_fld_6-2'],input[name='form_0009_fld_6-3'],label[for='form_0009_fld_6-3'],input[name='form_0009_fld_6-4'],label[for='form_0009_fld_6-4'],input[name='form_0009_fld_6-5'],label[for='form_0009_fld_6-5'],input[name='form_0009_fld_6-6'],label[for='form_0009_fld_6-6']").closest('.formField').show(); 
    } else { 
     $("input[name='form_0009_fld_6-0'],label[for='form_0009_fld_6-0'],input[name='form_0009_fld_6-1'],label[for='form_0009_fld_6-1'],input[name='form_0009_fld_6-2'],label[for='form_0009_fld_6-2'],input[name='form_0009_fld_6-3'],label[for='form_0009_fld_6-3'],input[name='form_0009_fld_6-4'],label[for='form_0009_fld_6-4'],input[name='form_0009_fld_6-5'],label[for='form_0009_fld_6-5'],input[name='form_0009_fld_6-6'],label[for='form_0009_fld_6-6']").closest('.formField').hide(); 
     } 
}); 
+0

解决此问题的更好方法是在代码中包含“isHidden”检查,而不是修改是否检查某些内容?如果他们想让复选框再次可见,这将保持用户的选择。 – Codeman 2013-04-30 19:24:24

+0

另外,你可以给我们一个JSFiddle展示这个问题吗? – Codeman 2013-04-30 19:24:39

+0

你可以使用jquery修改任何DOM元素,所以你仍然可以添加类来输入你的目标,比使用无法读取的选择器更好 – 2013-04-30 19:26:57

回答

1

Jquery允许您链接函数,以便您可以添加到hide的末尾。

例如:

$('longselector').closest('.formField').hide().attr("checked", false); 

而且随着你的代码的其余部分。

$("input[id='form_0009_fld_5-0']").click(function() { 
    if($(this).is(':checked')) { 
     $("input[name='form_0009_fld_6-0'],label[for='form_0009_fld_6-0'],input[name='form_0009_fld_6-1'],label[for='form_0009_fld_6-1'],input[name='form_0009_fld_6-2'],label[for='form_0009_fld_6-2'],input[name='form_0009_fld_6-3'],label[for='form_0009_fld_6-3'],input[name='form_0009_fld_6-4'],label[for='form_0009_fld_6-4'],input[name='form_0009_fld_6-5'],label[for='form_0009_fld_6-5'],input[name='form_0009_fld_6-6'],label[for='form_0009_fld_6-6']").closest('.formField').show(); 
    } else { 
     $("input[name='form_0009_fld_6-0'],label[for='form_0009_fld_6-0'],input[name='form_0009_fld_6-1'],label[for='form_0009_fld_6-1'],input[name='form_0009_fld_6-2'],label[for='form_0009_fld_6-2'],input[name='form_0009_fld_6-3'],label[for='form_0009_fld_6-3'],input[name='form_0009_fld_6-4'],label[for='form_0009_fld_6-4'],input[name='form_0009_fld_6-5'],label[for='form_0009_fld_6-5'],input[name='form_0009_fld_6-6'],label[for='form_0009_fld_6-6']").closest('.formField').hide().attr("checked", false); 
     } 
}); 
+0

哦,男人,这让我疯狂。我发现这是我必须解决的链条顺序(我认为把attr()放在最后就是将它应用到.closest()也许?)。以下作品:'$(“selectors”)。prop(“checked”,false).closest('.formField')。hide();' – 2013-05-01 22:57:08

1

属性选择器可以匹配“打头”,“结尾”,和很多其他的选择,所以没有需要键入一堆像类似的选择吗?

要设置相应的复选框以“未登记”,你会使用prop('checked', false)如果最初切换不检查等,并使用change事件的复选框,可能比一个click事件更好:

$("input[id^='form_0009_fld_5']").on('change', function() { 
    var elems = $('input[name^="form_0009_fld_6"]'), 
     state = this.checked; 

    elems.closest('.formField').toggle(state); 

    if (!state) elems.prop('checked', false); 
}); 
相关问题