回答
布爾屬性進行了說明:
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. 設置屬性值
- 3. 設置.Top屬性,刪除Anchor屬性
- 4. Ember問題與設置屬性值
- 5. 設置屬性值使用屬性名
- 6. C#通過與屬性反射設置屬性值
- 7. RadioButton的設置值屬性
- 8. 動態設置屬性值
- 9. 動態設置屬性值
- 10. 設置模特屬性值
- 11. 如何設置屬性值
- 12. 設置爲輸入$ scope.myObjectVariable值屬性值
- 13. 如何設置其他bean的屬性值bean屬性值
- 14. 設置屬性
- 15. 設置命令有兩種設置屬性值的可能性
- 16. 設置和刪除onclick屬性
- 17. 如何從附屬依賴項屬性設置屬性值?
- 18. ASP.Net Core 2.0 - 引用'Microsoft.NET.Sdk.Web'和'PreserveCompilationContext'屬性未設置爲假
- 19. 無法基於Ajax響應設置複選框屬性真假
- 20. 在JavaScript 2D數組中設置對象的真/假屬性
- 21. 設置可見真或假的使用依賴屬性
- 22. 編輯屬性誰不能設置爲真/假同等
- 23. 單選按鈕檢查屬性沒有設置爲假
- 24. 當在PropertyGrid中按下刪除鍵時設置屬性的值
- 25. 無法設置屬性與JavaScript
- 26. 的DataBind與設置控件屬性
- 27. 與觸發設置對象屬性WPF
- 28. 設置一個HTML屬性與PHP
- 29. FactoryGirl設置屬性與關聯
- 30. attributeError:無法設置屬性與瓶-SQLAlchemy
我更喜歡[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