我在尝试创建“全部检查”时遇到了一些问题。
这是第一次有效。当多次这样做时(比如打开,关闭和再打开),它就不再检查框了!
HTML
<label><input type='checkbox' id='CheckAll' />Click me!</label><br />
<br />
<input type='checkbox' name='Checks' value='1' /><br />
<input type='checkbox' name='Checks' value='2' /><br />
<input type='checkbox' name='Checks' value='3' /><br />
<input type='checkbox' name='Checks' value='4' /><br />
<input type='checkbox' name='Checks' value='5' />
的jQuery
$('#CheckAll').change(function() {
var $Checked = $(this).prop('checked');
if ($Checked === true) {
$(document).find('input:checkbox[name=\'Checks\']').prop('checked', true);
} else {
$(document).find('input:checkbox[name=\'Checks\']').removeProp('checked');
}
});
我在JSFiddle中重现了这个问题:http://jsfiddle.net/aTW8Y/1/
我是否忽略了某些内容或试图以错误的方式使用.prop()
属性?
答案 0 :(得分:2)
使用.prop("checked", false);
代替removeProp
:
$('#CheckAll').change(function() {
$(document).find('input:checkbox[name=\'Checks\']')
.prop('checked', $(this).prop('checked'));
});
来自docs:
jQuery首先将值undefined赋值给属性并忽略 浏览器生成的任何错误。一般来说,只需要 删除已在对象上设置的自定义属性,而不是 内置(本机)属性
答案 1 :(得分:1)
您要删除checked
媒体资源,只需将其设为false
:
$(document).find('input:checkbox[name=\'Checks\']').prop('checked', false);
答案 2 :(得分:1)
正如removeProp()
documentation所述:
注意:请勿使用此方法删除已选中,已禁用或已选中的本机属性。这将完全删除属性,一旦删除,就不能再次添加到元素。使用.prop()将这些属性设置为false。
在调用removeProp()
时,您将从复选框中完全删除checked
属性。而不是那样,只需使用prop()
将值设置为false
:
$(document).find('input:checkbox[name=\'Checks\']').prop('checked', false);
答案 3 :(得分:1)
首先,你应该使用prop('checked', false)
删除支票,其次你可以将你的逻辑简化为1个班次:
$('#CheckAll').change(function() {
$('input:checkbox[name=\'Checks\']').prop('checked', $(this).prop('checked'));
});
答案 4 :(得分:1)
改为使用prop('checked', false)
!