当属性是布尔属性时,HTML 5中的含义是什么?

时间:2010-11-09 23:28:04

标签: html5

隐藏属性这样的属性是布尔属性是什么意思?有人可以用外行的话来解释这个吗?

5 个答案:

答案 0 :(得分:95)

如前所述,布尔属性是被评估为true或false的属性。

但是,从HTML5规范 - http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes

  

2.5.2布尔属性

     

许多属性是布尔属性。存在的   元素的布尔属性   代表真正的价值,而且   没有属性代表   虚假的价值。

     

如果属性存在,则其值必须为空字符串   或者是ASCII的值   不区分大小写的匹配   属性的规范名称,没有   领先或尾随空格。

     

布尔属性不允许使用值“true”和“false”。至   表示虚假值,属性   必须完全省略。

请注意,这意味着HTML5中允许{strong 1>

正确可以是<div hidden="true"><div hidden><div hidden="">,也可以是不区分大小写和单引号/不带引号的任何变体。

答案 1 :(得分:35)

  

2.5.2布尔属性

     

许多属性是布尔属性。存在的   元素上的boolean属性表示真值,而   缺少属性表示错误值。

     

如果属性存在,则其值必须为空字符串   或者是属性的ASCII不区分大小写匹配的值   规范名称,没有前导或尾随空格。

     

布尔属性不允许使用值“true”和“false”。   要表示false值,必须省略该属性   共

答案 2 :(得分:3)

正如其他人所说,布尔值有三种可能的 true 语法:

<textarea readonly></textarea>
<textarea readonly=""></textarea>
<textarea readonly="readonly"></textarea>

一个用于 false

<textarea></textarea>

除了你有一些像这样的例外,显然:

  

拼写检查[HTML5]

     

将此属性的值设置为true表示该元素需要检查其拼写和语法。值default表示元素将根据默认行为进行操作,可能基于父元素自己的拼写检查值。值false表示不应检查该元素。

答案 3 :(得分:0)

  

2.4.2。布尔属性

     

许多属性是布尔属性。一个的存在   元素上的boolean属性表示真实值,并且   没有属性表示错误值。

     

如果存在该属性,则其值必须为空字符串   或该属性的ASCII大小写不匹配的值   规范名称,没有前导或尾随空格。价值   布尔属性上不允许使用“ true”和“ false”。代表   一个假值,该属性必须完全省略。

示例: 这是已选中并禁用的复选框的示例。选中和禁用属性是布尔属性。

<label><input type=checkbox checked name=cheese disabled> Cheese</label>

这可以等效地写成这样:

<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>

您还可以混合样式。以下仍然等效:

<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>

查看此信息Boolean HTML Attributes,这可能也对您有帮助。

答案 4 :(得分:-1)

A。基于Bob.at.Indigo.Health的评论:

具有一些应该表示布尔值的html属性(例如,复选框的checked属性)...将其设置为的唯一方法 false忽略属性 ,:

<input type="checkbox"  />

所有其他分配将被解释为true(即使不遵循html标准),e。 g。

<input type="checkbox" checked="checked"/> 
<input type="checkbox" checked=undefined />
<input type="checkbox" checked=null/>
<input type="checkbox" checked=false/>
<input type="checkbox" checked="false"/>
<input type="checkbox" checked=""/>
<input type="checkbox" checked="foo"/>

http://jsfiddle.net/hgq4ewr1/

B。某些 JavaScript 库可能会定义特殊值,这些特殊值也会被解释为false。

例如,使用d3.js,您可以通过使用attr调用null函数来删除属性(“将它们设置为false”):

d3Selection.attr('checked', null);

HTMLElement的getAttribute方法返回null'',如果 属性不存在。

另请参阅:

C。如果您从 JavaScript 中的HTMLElement继承,则可以定义与字符串不同类型的自定义属性。另请参见https://www.webcomponents.org/introduction

但是,我将这些JavaScript属性而不是HTML属性称为

<html>
    <head>      
        <script>
            class TreezElement extends HTMLElement {

                static get observedAttributes() {
                    return ['value'];
                }


                get valueProperty() {
                  var stringValue = this.getAttribute('value')
                  return this.convertFromStringValue(stringValue);
                }

                set valueProperty(newValue) {
                  var stringValue = this.convertToStringValue(stringValue)
                  if(stringValue === null){
                      this.removeAttribute('value');
                   } else {
                      this.setAttribute('value', stringValue);    
                   }
                }               

                constructor(){
                    super();                        
                } 

                //should be overridden by inheriting class
               convertFromStringValue(stringValue){                     
                    return stringValue;
                }

                //should be overridden by inheriting class
                //return null if the value attribute should be removed
                //(="set to false")
                convertToStringValue(value){

                    return value;
                }

                updateElements(newValue){
                    //should be implemented by inheriting class
                }


                attributeChangedCallback(attr, oldValue, newValue) {
                     if(attr==='value'){                                                
                        if(newValue!==oldValue){    
                            this.updateElements(newValue);                          
                            this.__dispatchInputEvent();
                        }
                     } 


                }       



            }
        </script>
    </head>
</html>