2011-10-10 63 views
5

我總是覺得HTML <input>disabled屬性,都在扭曲我的大腦。爲什麼選擇一個否定的屬性名稱,是不是更直觀的enabled爲什麼屬性「禁用」,但沒有「啓用」

只是比較:

enabled=advancedUser 
disabled=not(advancedUser) 

enabled=not(locked) 
disabled=locked 

enabled=advancedUser and not(locked) 
disabled=not(advancedUser) or locked 
disabled=not(advancedUser and not(locked)) 
+5

也許吧,但W3C這樣做了,在這裏抱怨不會改變它。 – alex

回答

12

這背後的根本原因是,這是一個後來除了HTML輸入字段,並且是這個樣子,以保持與現有的網頁向後兼容性需要。

<input>標籤最初被定義時,其功能非常有限。它沒有disabledreadonly屬性,也沒有我們今天認爲理所當然的許多其他屬性。

這些都是後來添加的,但是當它們被添加時,許多網站已經在使用<input>字段,所以禁用它的能力必須在不影響現有代碼的情況下才能使用。因此默認狀態必須是enabled

它也必須是布爾標誌,這就是爲什麼它是disabled而不是enabled=true。後者將是一個鍵值對屬性。這不是一個好的選擇。

考慮以下幾點:

enabled=false 
enabled=0 
enabled=FALSE 
enabled=no 
enabled=disabled 
enabled=flase 
etc... 

瀏覽器將不得不能夠應付可能值的數量巨大。使它成爲一個布爾標誌極大地簡化了事情。它使規格更容易理解,無論是網站開發人員還是瀏覽器開發人員。

另一件需要記住的是,這個屬性被添加到HTML的時間是在所謂的「瀏覽器戰爭」中。許多功能被添加到競爭的網頁瀏覽器中,匆忙併且沒有正式規格的好處,並且添加了許多功能,我們可以真正回顧並希望它稍有不同。

我不相信這是這些功能之一:disabled標誌是完全合乎邏輯真的,如果你停下來想一想。但是如果瀏覽器開發人員在當時合作得更多一些,它可能會更好地設計出來。

但無論如何,今天的情況是,這就是我們所擁有的。 HTML規範可能正在發展,但現有的功能現在不會改變。

相關問題