2014-02-06 52 views
1

見的jsfiddle差異HTML複選框 '檢查' 屬性/屬性的IE和鉻

http://jsfiddle.net/gK6kX/11/具有行:

$("input#aaa")[0].checked = false; 
$("input#aaa")[0].setAttribute('checked', false); 

第三複選框上Chrome,但不IE(IE9)。

我明白爲什麼在Chrome上檢查它 - checked =「false」表示該框仍然被選中。

明白爲什麼對IE進行檢查。

看起來好像第一行(DOM對象上的checked = false與setAttribute)在某種程度上在IE上有所不同,但不是Chrome。

這第一行是做什麼的?爲什麼有人會使用兩條線而不是setAttribute

+0

我相信你會在這裏遇到了一個錯誤。 JSFiddle上的JQuery 1.10.1似乎不適用於IE。你能否通過在其後面添加警報來確認代碼是否正在執行?如果不是,請嘗試另一個jQuery版本。它應該在IE中表現相同,正如您注意到靜態版本那樣。 –

+0

這可能是它。使用不同的jQuery版本,我在IE和Chrome中獲得了相同的結果。 – wrschneider

+0

更新的問題 - 真正的問題是關於檢查的屬性與檢查的屬性 – wrschneider

回答

1

如果您使用jQuery,請使用$.attr()來設置初始選中狀態。在事實之後使用$.prop()更改屬性。所以,如果你有一個被加載並已經選中複選框,這樣做是爲了取消它:

$("input#aaa")[0].prop('checked', true); // set checked 
$("input#aaa")[0].prop('checked', false); // uncheck 

注意,如果checked屬性存在的元素可言,無論價值多少,則初始狀態的複選框應被視爲已被選中。這是according to the W3C。因此,如果複選框上有checked="false",則仍會被檢查checked屬性僅通過defaultChecked屬性設置複選框的初始狀態。此後要更改複選框的狀態,您需要修改checked屬性(該屬性不再重要)。

這樣做在技術上設置複選框的初始狀態:

$("input#aaa")[0].attr('checked', 'checked'); // initial state is checked 

同樣,如果你想改變的選中狀態的複選框被創建後,使用$.prop()

參考(我建議您閱讀的全部兩個頁面):

+0

不回答我的問題 - 詢問關於給定代碼的瀏覽器之間的具體差異 – wrschneider

+0

@ wrschneider99'setAttribute'用於設置屬性'checked',因此屬性'defaultChecked' - 此屬性用於複選框的初始狀態。如果您想在此之後修改狀態,則應該更改'checked'屬性,而不是屬性。 – matthewpavkov

+0

@ wrschneider99好吧,現在我看到你的問題。 – matthewpavkov