2013-04-02 84 views
3

在使用jQuery下面的代碼:複選框被觸發時,爲什麼「checked」屬性不正確?

http://jsfiddle.net/UcGyM/

$("input").change(function (evt) { 
    console.log("change event handler invoked", evt); 
    console.log($("input").is(':checked')); 
    console.log($("input").attr("checked")); 
    console.log($("input").prop("checked")); 
}); 

$("input").trigger("click"); 
$("input").trigger("click"); 

is(':checked')prop("checked")都能表現出一個真實的,但'ATTR( 「選中」)將顯示不確定的。我以爲他們是一樣的? (即使我們手動點擊複選框,效果也是一樣)。

另外,如果我設置HTML的checked使該複選框在默認情況下(http://jsfiddle.net/UcGyM/1/)檢查,現在attr("checked")會打印出checked兩個觸發,所以它不能夠告訴它是否被選中或不 - 爲什麼呢? (這也是奇怪的是,這兩種顯示checked,但$("input").attr("checked", true);$("input").attr("checked", false);可以打開或關閉它。)

一個相關的問題是,如果我們要堅持使用attr("checked"),是否在HTML的意思是,它有有checked屬性:<input type="checkbox" checked>,如果是這樣,它如何指定屬性,但默認關閉? (因爲checked="false"checked=""checked="0"不會讓選擇它的默認值。

+3

[這個問題](http://stackoverflow.com/questions/5874652/prop-vs-attr)可能的幫助。 –

+0

屬性並不總是與屬性保持一致,這就是爲什麼對'.attr' /'.prop'所做的更改非常重要和必要的原因。 –

+2

你的問題的大部分答案在這裏http://api.jquery.com/prop/ – j08691

回答

2

不,他們是不一樣的。.attr是DOM屬性。這將是checked如果該元素是

<input type=checkbox checked> 

這是在財產點擊時得到改變。

至於你的相關的問題,checked是一個布爾屬性,所以沒有辦法指定元素不同時爲T檢查他根本就查了屬性。

我不知道你爲什麼會想堅持使用attrthe jQuery API itself says this is incorrect as of jQuery 1.6

相關問題