jQuery .prop():如果Checked =(check all)else(取消全部检查)

时间:2013-10-15 11:24:30

标签: jquery

我在尝试创建“全部检查”时遇到了一些问题。

这是第一次有效。当多次这样做时(比如打开,关闭和再打开),它就不再检查框了!

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()属性?

5 个答案:

答案 0 :(得分:2)

使用.prop("checked", false);代替removeProp

$('#CheckAll').change(function() { 
    $(document).find('input:checkbox[name=\'Checks\']')
               .prop('checked', $(this).prop('checked')); 
});

来自docs

  

jQuery首先将值undefined赋值给属性并忽略   浏览器生成的任何错误。一般来说,只需要   删除已在对象上设置的自定义属性,而不是   内置(本机)属性

Updated fiddle

答案 1 :(得分:1)

您要删除checked媒体资源,只需将其设为false

$(document).find('input:checkbox[name=\'Checks\']').prop('checked', false); 

Fiddle

答案 2 :(得分:1)

正如removeProp() documentation所述:

  

注意:请勿使用此方法删除已选中,已禁用或已选中的本机属性。这将完全删除属性,一旦删除,就不能再次添加到元素。使用.prop()将这些属性设置为false。

在调用removeProp()时,您将从复选框中完全删除checked属性。而不是那样,只需使用prop()将值设置为false

$(document).find('input:checkbox[name=\'Checks\']').prop('checked', false); 

Working JSFiddle demo

答案 3 :(得分:1)

首先,你应该使用prop('checked', false)删除支票,其次你可以将你的逻辑简化为1个班次:

$('#CheckAll').change(function() { 
    $('input:checkbox[name=\'Checks\']').prop('checked', $(this).prop('checked'));
});

Example fiddle

答案 4 :(得分:1)

http://jsfiddle.net/aTW8Y/5/

改为使用prop('checked', false)