2013-02-26 58 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