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

Phi*_*enn 110 jquery

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

$('input').filter(':checkbox').removeAttr('checked');
Run Code Online (Sandbox Code Playgroud)

要么

$('input').filter(':checkbox').prop('checked',false);
Run Code Online (Sandbox Code Playgroud)

Joh*_*ess 123

jQuery 3

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

在此之前的jQuery 3.0,使用.removeAttr()上的布尔属性如checked,selected,或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执行此操作.

  • @tandu:你*可以*,但你不应该.从文档:"**注意:**不要使用[`removeProp()`]删除本机属性,如已选中,已禁用或已选中.这将完全删除该属性,一旦删除,将无法再次添加使用`.prop()`将这些属性设置为false." `removeProp`实际上仅用于自定义属性. (35认同)
  • 你可以使用`removeProp()` (3认同)

sur*_*wat 14

use checked:复选框的true,false属性.

jQuery的:

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


Rag*_*nar 7

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

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