以下代码的惊人问题:
<head>
<script>
$(function() {
$('.select-all').click(function() {
var isChecked = $(this).is(':checked');
$(this).closest('section').find('input:checkbox').each(function() {
$(this).attr('checked', isChecked);
});
});
});
</script>
</head>
<body>
<section id="sect_1">
<input type="checkbox" id="cb_1_1">1.1
<input type="checkbox" id="cb_1_2">1.2
<input type="checkbox" id="cb_1_3">1.3
<input type="checkbox" class="select-all">All
</section>
<section id="sect_2">
<input type="checkbox" id="cb_2_1">2.1
<input type="checkbox" id="cb_2_2">2.2
<input type="checkbox" id="cb_2_3">2.3
<input type="checkbox" class="select-all">All"
</section>
</body>
- 单击一个部分的“全部”CB 会检查该部分内的所有其他 CB。正如预期的那样
- 再次单击某个部分的“所有”CB 将取消选中该部分内的所有其他 CB。正如预期的那样
- 再次单击某个部分的“全部”CB 不会再检查该部分内的所有 CB。
在 Chrome 和 Firefox 上检查,我可以看到checked="checked"
属性在每个内部出现和消失,<input type="checkbox" id="cb_x_x">
但不影响显示的 CB
任何想法?
编辑
重要提示:上面的代码确实修改了 DOM。单击后,.select-all
选中时,父部分中的所有#cb_x_x
标签都会更新并检查我可以看到的 DOM <input type="checkbox" id="cb_x_x" checked="checked">
:.
再次单击取消选中.select-all
,DOM 也更新了:都#cb_x_x
失去了他们的属性checked
。
继续点击重新勾选/重新取消勾选,父节内的.select-all
所有标签仍然更新,属性继续出现/消失在父节内的所有标签上但显示不更新:所有CB保持显示即使在检查 DOM 时添加/删除了它们的属性,也未选中。#cb_x_x
checked="checked"
#cb_x_x
#cb_x_x
checked="checked"
此处提供实时代码:http: //jsbin.com/orehor/3/