如果有一些未经检查的话,我有一个应该检查所有复选框的函数。如果它们都被选中,那么它将取消全部取消选中。
在您第三次点击check all
链接之前,它会按预期工作。
function CheckAll(name) {
name = name.replace(/[[]/g, '\\[').replace(/]/g, '\\]');
if ($('input[name=' + name + ']:checkbox:not(:checked)').length) {
$('input[name=' + name + ']:checkbox:not(:checked)').attr('checked', true);
} else {
$('input[name=' + name + ']:checkbox:checked').attr('checked', false);
}
}
简单的HTML
<a href="#" onclick="CheckAll('users[]')">Check All</a><br/><br/>
<input type="checkbox" name="users[]" checked="checked"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
<input type="checkbox" name="users[]"/><br/>
答案 0 :(得分:3)
如果您使用的是jquery 1.6 +
,则需要使用.prop()
而不是.attr()
在该版本之后,处理的属性与属性不同,并且checked是属性而非属性。
正在发生的事情是.attr()只检查属性是否存在,它不关心值是什么。所以检查=&#34;假&#34;如果您使用.attr(),仍会返回true
。
如果使用.prop(),它将正确返回属性值,在我给出的示例中,该值将为false。
答案 1 :(得分:0)
您已经建议使用prop()
代替.attr()
。我认为你可以用更少的代码来实现你的结果:
function CheckAll(name) {
name = name.replace(/[[]/g, '\\[').replace(/]/g, '\\]'),
checkboxes = 'input[name=' + name + ']:checkbox';
$(checkboxes).prop('checked', $(checkboxes + ':checked').length !== $(checkboxes).length);
}