. prop (“勾选”,false)或. RemoveAttr (“勾选”) ?

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

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

或者

$('input').filter(':checkbox').prop('checked',false);
273757 次浏览

JQuery 3

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

在 jQuery 3.0之前,对布尔属性(如 checkedselectedreadonly)使用 .removeAttr()还会将相应的命名属性设置为 false。这种行为是 Internet Explorer 的古老版本所必需的,但是对于现代浏览器来说并不正确,因为属性代表初始值,而属性代表当前(动态)值。

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

更衣室

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


原答案(自2011年起) :

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

因此,这两种方法都可行... ... 但是您给出的第二个例子(使用 prop)更为正确。如果您的目标是取消选中复选框,那么您确实希望影响 财产,而不是属性,并且不需要通过 removeAttr来做到这一点。

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

JQuery:

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

做同样事情的另一种选择是过滤 Type = 复选框属性:

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

或者

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

请记住,属性和属性之间的区别在特定情况下可能很重要。在 JQuery 1.6之前,。Attr ()方法在检索某些属性时有时会考虑属性值,这可能导致不一致的行为。在 jQuery 1.6中,使用。方法提供了一种显式检索属性值的方法,而。Attr ()检索属性。

了解更多。

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

if ($(':checkbox').is(':checked')){
$(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
$(':checkbox').prop('checked', false).removeAttr('checked');
}
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>


  



<input id="checkbox" type="checkbox" onchange='act(this)'>
     

<input id="checkbox" type="checkbox" onchange='act(this)'>
  

<script>
  

  

function act(element){
   

if($(element). prop('checked'))
{
console.log('You have Checked it');
}else
{
console.log('You Un-Checked it');
}
}
   

</script>