以下兩種用法有什麼區別?checked =「checked」vs checked = true
document.getElementById('myRadio').checked = "checked";
和
document.getElementById('myRadio').checked = true;
對於我來說,兩者都表現了同樣的方式。但是,我只是想知道爲什麼存在兩種方法來做同樣的事情。
哪一個會是理想的用法?我需要支持IE7及更高版本。
以下兩種用法有什麼區別?checked =「checked」vs checked = true
document.getElementById('myRadio').checked = "checked";
和
document.getElementById('myRadio').checked = true;
對於我來說,兩者都表現了同樣的方式。但是,我只是想知道爲什麼存在兩種方法來做同樣的事情。
哪一個會是理想的用法?我需要支持IE7及更高版本。
document.getElementById('myRadio').checked
是一個布爾值。它應該是true
或false
document.getElementById('myRadio').checked = "checked";
將字符串轉換爲布爾值,這是true。
document.getElementById('myRadio').checked = true;
剛剛分配true
沒有鑄造。
使用true
,因爲它稍微更有效率,更有意向揭露維護者。
最初的checked
屬性(HTML 4及之前版本)不需要它的值 - 如果它存在,元素被「檢查」,否則它不是。
然而這不是有效的XHTML隨後HTML 4
建議使用checked="checked"
爲true的條件的標準 - 所以你發佈最終做同樣的事情,這兩種方式。
你使用哪一個並不重要 - 使用對你最有意義並堅持下去的方法(或者同意你的團隊走哪條路)。
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'
)都會選中該複選框。沒有理由不使用true
和false
雖然所以你應該堅持正確的價值觀。
該元素同時具有一個屬性和一個名爲checked
的屬性。該屬性確定當前狀態。
該屬性是一個字符串,屬性是一個布爾值。當從HTML代碼創建元素時,將從標記中設置屬性,並根據屬性的值設置屬性。
如果在標記屬性沒有值,屬性變得null
,但物業始終爲true
或false
,因此它成爲false
。
當您設置的屬性,你應該使用一個布爾值:
document.getElementById('myRadio').checked = true;
如果設置該屬性,您使用的字符串:
document.getElementById('myRadio').setAttribute('checked', 'checked');
注意,設置屬性也會改變屬性,但設置屬性不會更改屬性。
還要注意,無論您將屬性設置爲何值,該房產都將變爲true
。即使您使用空字符串或null
,設置屬性意味着它被檢查。使用removeAttribute
使用屬性取消選中的元素:
document.getElementById('myRadio').removeAttribute('checked');
屬性和屬性之間的很好的解釋。謝謝! – Mac
號在HTML 4和早前確實能需要一個值......這是,這是可選的名字。即'checked ='checked''是完整版本,但是你可以將'checked =''和'''關閉,並且將值留在後面。 (SGML可以得到*怪異的*!) – Quentin
也就是說,問題在於詢問DOM屬性,而不是HTML規則。 – Quentin
@Quentin - 很公平,儘管這幾乎是關於語義的爭論。 – Oded