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

随着prop方法的介绍,现在我需要知道取消选中checkbox的可接受方式。 是吗:

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

要么

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

jQuery 3

从jQuery 3开始, removeAttr 不再将相应的属性设置为false

在jQuery 3.0之前,对布尔属性(如checkedselectedreadonly .removeAttr()使用.removeAttr()也会将相应的named属性设置为false 。 此行为是古代版本的Internet Explorer所必需的,但对于现代浏览器不正确,因为属性表示初始值,属性表示当前(dynamic)值。

在DOM元素上使用.removeAttr( "checked" )几乎总是一个错误。 唯一有用的是如果DOM稍后要被序列化回HTMLstring。 在所有其他情况下,应该使用.prop( "checked", false )

更新日志

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


原文答复(2011年起):

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

所以,要么会工作…但你给的第二个例子(使用prop )是更正确的两个。 如果您的目标是取消选中checkbox,您确实想要影响属性 ,而不是属性,并且不需要通过removeAttr来完成此操作。

另一种做同样的事情的方法是过滤type = checkbox属性:

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

要么

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

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

了解更多 …

使用checked:true,checkbox的false属性

DEMO

jquery:

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

我build议同时使用,prop和attr,因为我遇到了Chrome的问题,我使用这两个函数解决了它。

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