2013-02-26 54 views
8

我无法弄清楚这一点。根据W3 Schools,,checked属性设置或返回复选框的选中状态。JS .checked vs jquery attr('checked'),有什么区别?

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

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

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

这是一个基于数据库中值检查的复选框。

+0

问鼎jQuery的另一个不 – 2013-02-26 04:28:04

+0

更换.attr()与.prop(),因为.prop()更快 – frosdqy 2013-02-26 04:33:24

+0

更新撑起 – 2013-02-26 04:39:29

回答

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将返回true或基于是否根本

+0

如果你想真正把该属性,你可以使用'attr'或'$('input')[0] .getAttribute('checked')'? – RobG 2013-02-26 04:29:33

+1

@RobG我个人倾向于通过jQuery使用原生DOM,但这取决于情况。而'checked'是一个坏例子,因为值并不重要 - 它是一个布尔属性。 – Dennis 2013-02-26 04:38:27

+0

@RobG:jQuery为布尔属性做了一些事情,所以如果你想要真正的价值,你必须使用'getAttribute'。 – Blender 2013-02-26 04:42:25

4

checked是DOM对象的属性,而不是jQuery对象的属性。为了使它的工作,你必须得到DOM对象:

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

你也可以做​​。

0

存在$(“输入”)的属性false返回一个jQuery对象,它并没有checked属性。您可以使用$('input')[0] .checked。

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(); 

希望这有助于!

4

在这种情况下,你需要prop()而非attr(), 在你的代码通常会工作prop()更换呼叫attr()

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()

/is-checked-vs-attr-checked-checked/7http://jsperf.com/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

相关问题