2012-05-18 184 views
30

以下兩種用法有什麼區別?checked =「checked」vs checked = true

document.getElementById('myRadio').checked = "checked"; 

document.getElementById('myRadio').checked = true; 

對於我來說,兩者都表現了同樣的方式。但是,我只是想知道爲什麼存在兩種方法來做同樣的事情。

哪一個會是理想的用法?我需要支持IE7及更高版本。

回答

40
document.getElementById('myRadio').checked

是一個布爾值。它應該是truefalse

document.getElementById('myRadio').checked = "checked";將字符串轉換爲布爾值,這是true。

document.getElementById('myRadio').checked = true;剛剛分配true沒有鑄造。

使用true,因爲它稍微更有效率,更有意向揭露維護者。

7

最初的checked屬性(HTML 4及之前版本)不需要它的值 - 如果它存在,元素被「檢查」,否則它不是。

然而這不是有效的XHTML隨後HTML 4

建議使用checked="checked"爲true的條件的標準 - 所以你發佈最終做同樣的事情,這兩種方式。

你使用哪一個並不重要 - 使用對你最有意義並堅持下去的方法(或者同意你的團隊走哪條路)。

+5

號在HTML 4和早前確實能需要一個值......這是,這是可選的名字。即'checked ='checked''是完整版本,但是你可以將'checked =''和'''關閉,並且將值留在後面。 (SGML可以得到*怪異的*!) – Quentin

+3

也就是說,問題在於詢問DOM屬性,而不是HTML規則。 – Quentin

+0

@Quentin - 很公平,儘管這幾乎是關於語義的爭論。 – Oded

2

checked屬性是一個布爾值,因此除了布爾false"checked"值的其它"string"轉換爲true

任何字符串值都將爲true。屬性的存在使其成爲true:

<input type="checkbox" checked> 

您可以使其僅使用JS在DOM中進行布爾更改。

所以答案是:他們是平等的。

w3c

+2

您正在將JavaScript DOM屬性與HTML屬性混淆(並且在瀏覽器錯誤恢復中混淆了很多措施)。 – Quentin

6

document.getElementById('myRadio')返回你的DOM元素,我會在這個答案中引用它作爲elem

elem.checked訪問屬性名爲checked的DOM元素。這個屬性總是一個布爾值。

在編寫HTML時,您在XHTML中使用checked="checked";在HTML中,您可以簡單地使用checked。設置屬性時(通過.setAttribute('checked', 'checked')完成),您需要提供一個值,因爲某些瀏覽器認爲空值不存在。

但是,由於您具有DOM元素,因此您無需設置屬性,因爲您可以簡單地使用 - 更舒適的布爾屬性。由於在布爾上下文中將非空字符串視爲true,因此將elem.checked設置爲'checked'或其他任何非虛假值(即使是'false''0')都會選中該複選框。沒有理由不使用truefalse雖然所以你應該堅持正確的價值觀。

5

該元素同時具有一個屬性和一個名爲checked的屬性。該屬性確定當前狀態。

該屬性是一個字符串,屬性是一個布爾值。當從HTML代碼創建元素時,將從標記中設置屬性,並根據屬性的值設置屬性。

如果在標記屬性沒有值,屬性變得null,但物業始終爲truefalse,因此它成爲false

當您設置的屬性,你應該使用一個布爾值:

document.getElementById('myRadio').checked = true; 

如果設置該屬性,您使用的字符串:

document.getElementById('myRadio').setAttribute('checked', 'checked'); 

注意,設置屬性也會改變屬性,但設置屬性不會更改屬性。

還要注意,無論您將屬性設置爲何值,該房產都將變爲true。即使您使用空字符串或null,設置屬性意味着它被檢查。使用removeAttribute使用屬性取消選中的元素:

document.getElementById('myRadio').removeAttribute('checked'); 
+0

屬性和屬性之間的很好的解釋。謝謝! – Mac