.prop('checked',false)或.removeAttr('checked')?


115

随着prop方法的引入,现在我需要知道取消选中复选框的可接受方法。是吗:

$('input').filter(':checkbox').removeAttr('checked');

要么

$('input').filter(':checkbox').prop('checked',false);

4
你读过约翰·雷西格的帖子吗?ejohn.org/blog/jquery-16-and-attr
Jared

Answers:


130

jQuery 3

在jQuery 3,removeAttr没有设置相应的属性false了:

在此之前的jQuery 3.0,使用.removeAttr()上的布尔属性如checkedselected,或readonly也将设置相应的名字的属性,false。对于旧版本的Internet Explorer,此行为是必需的,但对于现代浏览器,此行为是不正确的,因为该属性表示初始值,而该属性表示当前(动态)值。

.removeAttr( "checked" )在DOM元素上使用几乎总是一个错误。唯一有用的时间是,以后将DOM序列化回HTML字符串。在所有其他情况下,.prop( "checked", false )应改为使用。

变更日志

因此,只有.prop('checked',false)在使用此版本时才是正确的方法。


原始答案(自2011年起):

对于具有基础布尔属性(checked为1)removeAttr的属性,将基础属性自动设置为false。(请注意,这是jQuery 1.6.1中添加的向后兼容性“修复程序”)。

因此,任何一个都可以工作...但是您提供的第二个示例(使用prop)是两者中更正确的一个。如果您的目标是取消选中该复选框,则您确实希望影响属性而不是属性,因此无需进行任何removeAttr操作。


36
@tandu:可以,但是不可以。从文档中:“ 注意:请勿使用[ removeProp()]删除本机属性,例如选中,禁用或选定。这将完全删除该属性,一旦删除,将无法再次添加到元素。.prop()用于将这些属性设置为false代替。” removeProp实际上仅用于自定义属性。
约翰·弗拉蒂尼斯

17

使用checked:复选框的true,false属性。

jQuery的:

if($('input[type=checkbox]').is(':checked')) {
    $(this).prop('checked',true);
} else {
    $(this).prop('checked',false);
}

我们可以消除是否使用$(this).prop('checked',$('input [type = checkbox]')。is(':checked'));
Yousaf Hassan

8

我建议同时使用prop和attr,因为我在使用Chrome时遇到了问题,并且同时使用这两个函数解决了该问题。

if ($(':checkbox').is(':checked')){
    $(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
    $(':checkbox').prop('checked', false).removeAttr('checked');
}

是的,对于镀铬,请使用: $("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");

我使用自定义组件(CSS + JS)替换输入单选和复选框。这是对我有效的唯一方法。谢谢!
Silvio Delgado

3

执行相同操作的另一种方法是对type = checkbox属性进行过滤:

$('input[type="checkbox"]').removeAttr('checked');

要么

$('input[type="checkbox"]').prop('checked' , false);

请记住,属性和属性之间的差异在特定情况下可能很重要。在jQuery 1.6之前,.attr()方法在检索某些属性时有时会考虑属性值,这可能会导致行为不一致。从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()则检索属性。

了解更多 ...


2
问题是“其中哪一个更正确”,不是“还有其他方法吗?”。您似乎没有试图回答这个问题
Andrew Stubbs 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.