回答
布爾屬性進行了說明:
http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2
一些屬性上的布爾變量的作用(例如,所選擇的 屬性的OPTION元素)。它們出現在元素的開始標記 中意味着該屬性的值是「真」。他們的 缺席意味着「虛假」的價值。
布爾屬性可以合法地採用單個值: 屬性本身的名稱(例如,selected =「selected」)。
因此,雖然有些瀏覽器可能會將字符串「false」解釋爲好像該值未設置,但其他人可能不會決定(哪個是正確的行爲)。實際上,據我所知(或認爲),任何非空字符串通常將值設置爲on/true(不管規範說的是合法值)。我相信這也是未定義的行爲,所以這可能會改變或不同,從瀏覽器到瀏覽器(不要依賴它)。
底線是,只是因爲瀏覽器或兩個可能偏離規範並不意味着你應該。完全刪除屬性是要走的路。
附錄:看看你的意見和質疑,我想你可能會對一般屬性值感到困惑。在HTML中,attr=false
和attr="false"
完全相同。任何版本的HTML都不需要引號(除非在值包含空格時需要消除歧義)。例如:
<input class=required>
<!-- This is fine -->
<input class=title required>
<!-- this is fine too, but "required" will be parsed as an attribute -->
<input class="title required">
<!-- To have two classes, we need the quotes -->
所有屬性值(在具有它們的元素上)都被視爲字符串。換句話說,HTML中沒有像真實布爾值值(或NULL
值)那樣的東西,就像在javascript中一樣。
感謝您的附錄,但我知道,在HTML中,它們被解釋爲字符串。這就是爲什麼我提到JavaScript。在javascript中,我可以像'['loop'] = false'那樣執行''false',而不是'''loop'] ='false''。你的回答有幫助。 – sawa 2012-01-08 07:02:04
@sawa:然後對附錄抱歉。我從來沒有在javascript中看到類似'['loop'] = false'的東西,也許'element.loop = false'。不知道你的語法在哪裏?我也看到你來自CT。所以,我對不起,以及:) – 2012-01-08 07:38:35
我看到,你也在CT。你的回答對我有幫助,而且我看不出有什麼問題。謝謝您的幫助。 – sawa 2012-01-08 08:03:08
只是讓任何人誰需要這樣的未來:
loop=false
仍然true
除非整個loop
屬性被刪除。基本上,只有loop
的存在纔是標籤需要做別的事情。你需要使用類似jQuery的東西來刪除entier loop
屬性(或者至少這是我會做的)。現在,如果您將其他未定義的屬性設置爲false
,那麼您可以將其識別爲false
。
你在混淆字符串和真正的布爾類型。 Javascript有一個布爾數據類型,包含兩個可能的值true和false(不含引號)。字符串可以包含任何文本,所以它們可以包含帶引號的「true」和「false」。設置屬性,以非空和非假產生true,所以下面將accour:
var a = true; // true
var b = false; // false
var c = "true"; // true
var d = "false" // true
var e = null; // false;
var f = 0; // false
var g = 1; // true
注意與C
他實際上是指它的HTML部分而不是JS。問題沒有正確標記 – JohnP 2012-01-08 06:22:28
噢,是的,對不起。誤解了這個問題 – 2012-01-08 06:23:28
嘿,不是我沒有仔細閱讀的情況...這是標記爲「javascript」的情況! – 2012-01-08 06:24:40
的audio
元素是一個HTML5元素的相似性,所以關於它的意義,你應該參考HTML5草案。在這種情況下,請參閱WHATWG草案開發者版本中的definition of boolean attributes。它實際上說,a)屬性的存在或不存在決定了DOM屬性值是否爲true
或false
,以及b)作爲對文檔的要求,該值必須是空的或(不區分大小寫)屬性名稱,在這種情況下爲loop=''
或loop="loop"
。在值的周圍使用引號在其他地方定義。
因此,瀏覽器需要識別loop=false
意味着與loop=loop
或loop=true
相同,但作者不得使用此類結構,並且HTML5檢查器會發出關於它們的錯誤消息。
(基本上,你應該使用HTML5的HTML序列化,只loop
和loop="loop"
在XHTML序列化。)
因此,如果你在JavaScript中的變量x
與audio
元素對象作爲其值, x.loop
的值爲true
或false
,而x.attributes['loop'].value
表示HTML標記中使用的值(通常不會像這樣感興趣)。
關於Firefox還有一個更復雜的問題:它似乎仍不支持loop
屬性(請參閱問題HTML5 Audio Looping)。這意味着如果你設置了例如loop="loop"
,x.attributes['loop'].value
將爲loop
,但Firefox甚至不設置x.loop
(即,它是undefined
),但更少實現該功能。
感謝您爲我的問題量身打造的詳細解答。 – sawa 2012-01-08 10:00:41
- 1. 其中移除Li屬性值與jQuery
- 2. Yii清除屬性的設置值
- 3. 設置屬性值
- 4. 設置屬性值
- 5. 設置.Top屬性,刪除Anchor屬性
- 6. 設置屬性值與燒傷
- 7. Ember問題與設置屬性值
- 8. 設置屬性值使用屬性名
- 9. C#通過與屬性反射設置屬性值
- 10. 設置Highslide屬性與jQuery
- 11. RadioButton的設置值屬性
- 12. 設置在AngularJS屬性值
- 13. 設置bgcolor屬性值
- 14. 設置多個值屬性
- 15. 如何設置屬性值
- 16. 設置無值的屬性
- 17. 設置模特屬性值
- 18. 動態設置屬性值
- 19. 動態設置屬性值
- 20. Magento設置新屬性值
- 21. 屬性設置器類型的其他值設置爲屬性?
- 22. 設置爲輸入$ scope.myObjectVariable值屬性值
- 23. 無法設置空值的屬性值
- 24. 設置屬性的屬性
- 25. 如何設置其他bean的屬性值bean屬性值
- 26. 設置屬性
- 27. 設置屬性
- 28. 設置-QADGroup,設置屬性
- 29. 設置命令有兩種設置屬性值的可能性
- 30. Pytables,HDF5屬性設置和刪除,
我更喜歡[falsy]這個詞(http://en.wikipedia.org/wiki/JavaScript_syntax#Boolean) – mplungjan 2012-01-08 06:15:02
根據這個,有價值的禮物被認爲是真實的,你會更安全的去那種方式,而不是設置爲false。 - http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2 – JohnP 2012-01-08 06:16:33