JS .checked vs jquery attr('checked'),有什么区别?

时间:2013-02-26 04:26:19

标签: javascript jquery attr checked

我无法想出这个。根据{{​​3}}, checked属性设置或返回复选框的选中状态。

那么为什么$('input').checked ? $('div').slideDown() : $('div').slideUp();不起作用?

然而,使用道具确实有用。

$('input').prop('checked') ? $('div').slideDown() : $('div').slideUp();

这是针对根据数据库值检查的复选框。

5 个答案:

答案 0 :(得分:11)

checked是一个DOM元素属性,因此在DOM元素而不是jQuery对象上使用它。

$('input')[0].checked

如果您有jQuery对象,请使用prop而不是attr,因为您正在检查属性。仅作为参考:

$("<input type='checkbox' checked='checked'>").attr("checked") // "checked"
$("<input type='checkbox' checked='foo'>").attr("checked") // "checked"
$("<input type='checkbox' checked>").attr("checked") // "checked"
$("<input type='checkbox'>").attr("checked") // undefined

[0].getAttribute("checked")将返回实际值。

prop将根据该属性是否存在而返回truefalse

答案 1 :(得分:4)

checked是DOM对象的属性,而不是jQuery对象的属性。要使其工作,您必须获取DOM对象:

$('input')[0].checked;

你也可以.is(':checked')

答案 2 :(得分:4)

在这种情况下,您需要prop()而不是attr(), 用代码中的attr()替换prop()来电通常会有效。

来自 http://blog.jquery.com/2011/05/10/jquery-1-6-1-rc-1-released/

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

elem.checked ==== true (Boolean)将随复选框状态更改

$(elem).prop("checked") ==== true (Boolean)将随复选框状态更改

elem.getAttribute("checked") ===== "checked" (String)复选框的初始状态;不会改变

$(elem).attr("checked") (1.6) ===== "checked" (String)复选框的初始状态;不会改变

$(elem).attr("checked") (1.6.1+) ======== "checked" (String)将随复选框状态更改

$(elem).attr("checked") (pre-1.6) ======= true (Boolean)已更改为复选框状态

此网址还可以帮助您更多地了解您的查询.prop() vs .attr()

http://jsperf.com/is-checked-vs-attr-checked-checked/7

/is-checked-vs-attr-checked-checked/7的差异

另外要了解The elements atttribute and properties,请参阅http://christierney.com/2011/05/06/understanding-jquery-1-6s-dom-attribute-and-properties/ http://jsperf.com/is-checked-vs-attr-checked-checked/7

答案 3 :(得分:0)

$('input')返回一个JQuery对象,它没有checked属性。你可以使用$('input')[0] .checked。

答案 4 :(得分:0)

$('input').attr('checked')已过时,应使用$('input').prop('checked')
此外,$('input').checked将不起作用,因为$('input')是jquery对象,checked是属性,因此这就是为什么jquery已经提出$('input').prop('checked')来访问该属性。

但是要将jQuery对象转换为DOM对象,你需要做 $('input')[0].checked这将成为DOM对象,然后您可以使用.

直接访问该属性

但是使用jquery访问属性应该使用:

$('input').prop('checked') ? $('div').slideDown() : $('div').slideUp();

希望这会有所帮助!!