随着prop方法的引入,现在我需要知道取消选中复选框的可接受方式。是吗:
$('input').filter(':checkbox').removeAttr('checked');
或
$('input').filter(':checkbox').prop('checked',false);
答案 0 :(得分:110)
jQuery 3
从jQuery 3开始,removeAttr
不再 将相应的属性设置为false
:
在jQuery 3.0之前,对
.removeAttr()
,checked
或selected
这样的布尔属性使用readonly
也会将相应的命名属性设置为{{1} }。此行为是古老版本的Internet Explorer所必需的,但对于现代浏览器而言是不正确的,因为该属性表示初始值,属性表示当前(动态)值。在DOM元素上使用
false
几乎总是错误的。唯一可能有用的是DOM稍后将被序列化回HTML字符串。在所有其他情况下,应使用.removeAttr( "checked" )
代替。
因此,在使用此版本时,只有.prop( "checked", false )
才是正确的方法。
原始答案(自2011年起):
对于具有基础布尔属性(其中.prop('checked',false)
为1)的属性,checked
会自动将基础属性设置为removeAttr
。 (请注意,这是jQuery 1.6.1中添加的向后兼容性“修复”)。
所以,要么会工作......但你给出的第二个例子(使用false
)是更正确的两个。如果您的目标是取消选中该复选框,那么您确实希望影响属性,而不是属性,并且无需通过prop
来执行此操作。
答案 1 :(得分:9)
使用checked
:复选框的true,false属性。
jQuery的:
if($('input[type=checkbox]').is(':checked')) {
$(this).prop('checked',true);
} else {
$(this).prop('checked',false);
}
答案 2 :(得分:4)
我建议同时使用prop和attr,因为我遇到了Chrome问题而且我使用这两个函数解决了它。
if ($(':checkbox').is(':checked')){
$(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
$(':checkbox').prop('checked', false).removeAttr('checked');
}
答案 3 :(得分:2)
另一种做同样事情的方法是过滤 type = checkbox 属性:
$('input[type="checkbox"]').removeAttr('checked');
或
$('input[type="checkbox"]').prop('checked' , false);
请记住,在特定情况下,属性和属性之间的区别很重要。在 jQuery 1.6 之前,.attr()方法在检索某些属性时有时会考虑属性值,这可能会导致行为不一致。从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()则检索属性。
Know more ...
答案 4 :(得分:-1)
<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>