我有一个简单但麻烦的问题。我有一个<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
有什么想法可以解决这个问题?谢谢!

最佳答案

一个简单的单线便可以做到这一点...

$("div.skills-container.hidden input:checkbox").prop("checked", false);


它查找div中具有类.skills-container.hidden的所有复选框,并将属性checked设置为false。

只需将其放入您的更改事件中即可:)

编辑:
根据Alnitak的建议,您可以通过仅选择当前选中的复选框来进一步缩小选择范围,而不用将它们设置为未选中。这可能会或可能不会影响性能,但是绝对值得检查一下是否有很多复选框可能会因此受到影响。

$("div.skills-container.hidden input:checkbox:checked").prop("checked", false);

关于javascript - jQuery alter元素是否具有类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19688111/

10-09 21:40