我有一个简单但麻烦的问题。我有一个<select>
字段和一些<div>
个checkbox
组。当<select>
字段的值发生变化时,我想检查<div>
,如果他们有hidden
类,那么我想取消选中所有复选框。
<select id="myselect">
<option value="1">some value 1</option>
<option value="2">some value 2</option>
</select>
<div id="skills-container-1" class="skills-container hidden">
<fieldset id="P2_SKILLS_1" class="checkbox_group">
<input type="checkbox" name="p_v16" value="2033"><br>
<input type="checkbox" name="p_v17" value="2034"><br>
<input type="checkbox" name="p_v18" value="2035"><br>
</fieldset>
</div>
<div id="skills-container-2" class="skills-container hidden">
<fieldset id="P2_SKILLS_2" class="checkbox_group">
<input type="checkbox" name="p_v19" value="2036"><br>
<input type="checkbox" name="p_v20" value="2037"><br>
<input type="checkbox" name="p_v21" value="2038"><br>
</fieldset>
</div>
在javascript中,在文档就绪函数中,在.change
字段的<select>
事件中,我执行以下操作:
if ($('.skills-container').hasClass('hidden')) {
$(this).find('input').removeAttr('checked');
}
显然它不起作用。我不确定我是否正确使用 this
项。可行this
引用<select>
元素,而不是<div>
类hidden
。
有什么想法解决这个问题吗?谢谢!
答案 0 :(得分:6)
一个简单的单行将会这样做......
$("div.skills-container.hidden input:checkbox").prop("checked", false);
它会找到包含类.skills-container
和.hidden
的div中的所有复选框,并将属性checked
设置为false。
只需将其放入您的更改活动中:)
修改强> 正如Alnitak所建议的那样,您可以通过仅选择当前选中的复选框来进一步缩小选择范围,而不是将其设置为未选中。这可能会或可能不会对性能产生影响,但如果您有很多可能受此影响的复选框,那么绝对值得一试。
$("div.skills-container.hidden input:checkbox:checked").prop("checked", false);
答案 1 :(得分:2)
编辑 - 使用Archer的优秀答案!
您需要单独检查每个“技能容器”:
$('.skills-container').each(function() {
if ($(this).hasClass('hidden'))
$(this).find('input').prop('checked', false);
});
当您使用.hasClass()
等API提问时,您只能获得第一个匹配元素的答案。通过使用.each()
进行迭代,您可以分别对每个操作执行操作。
答案 2 :(得分:0)
查找所有checked
项并将其取消选中
$('.skills-container.hidden').find(':checked').prop('checked',false):