2 回答
TA贡献1856条经验 获得超11个赞
实际上,由于您attr在批量选择后取消选择一个时使用,全选复选框保持选中状态。请随时检查之间的区别的文档attr和prop
$(document).ready(function() {
$("#BulkSelect").click(function() {
$('.Bulkers').prop('checked', this.checked);
});
$('.Bulkers').change(function() {
$("#BulkSelect").prop("checked", $(".Bulkers").length === $(".Bulkers:checked").length);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" name="BulkSelect" id="BulkSelect"/>Select All<br>
<input type="checkbox" class="Bulkers">Bulker 1<br>
<input type="checkbox" class="Bulkers">Bulker 1<br>
<input type="checkbox" class="Bulkers">Bulker 1<br>
<input type="checkbox" class="Bulkers">Bulker 1<br>
<input type="checkbox" class="Bulkers">Bulker 1<br>
<input type="checkbox" class="Bulkers">Bulker 1<br>
<input type="checkbox" class="Bulkers">Bulker 1<br>
TA贡献1777条经验 获得超10个赞
使用.prop而不是.attr.
问题在于,.attr它只设置属性checked。但是,当您单击复选框时,浏览器会更新其.checked属性,而不是其checked属性。
使用.prop,它将更新.checked复选框的属性,因此它将与值更改同步。
工作示例:
$(document).ready(function() {
$("#BulkSelect").click(function() {
$('.Bulkers').prop('checked', this.checked);
});
$('.Bulkers').change(function() {
if ($(".Bulkers").length == $(".Bulkers:checked").length) {
$("#BulkSelect").prop("checked", true);
} else {
$("#BulkSelect").prop("checked", false);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="BulkSelect" type="checkbox" /> Select All
<hr>
<input class="Bulkers" type="checkbox" /> 0<br>
<input class="Bulkers" type="checkbox" /> 1<br>
<input class="Bulkers" type="checkbox" /> 2<br>
<input class="Bulkers" type="checkbox" /> 3<br>
<input class="Bulkers" type="checkbox" /> 4<br>
<input class="Bulkers" type="checkbox" /> 5<br>
<input class="Bulkers" type="checkbox" /> 6<br>
<input class="Bulkers" type="checkbox" /> 7<br>
<input class="Bulkers" type="checkbox" /> 8<br>
<input class="Bulkers" type="checkbox" /> 9<br>
添加回答
举报