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

问题描述 投票:50回答:5

当像hidden属性这样的属性是布尔属性时,它意味着什么?有人可以用外行的话来解释这个吗?

html5
5个回答
38
投票

2.5.2布尔属性

许多属性是布尔属性。元素上存在布尔属性表示真值,缺少属性表示false值。

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

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


96
投票

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

但是,来自HTML5 Spec - http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes

2.5.2布尔属性

许多属性是布尔属性。元素上存在布尔属性表示真值,缺少属性表示false值。

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

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

请注意,这意味着HTML5中不允许使用<div hidden="true">

正确的将是<div hidden><div hidden=""><div hidden="hidden">或不区分大小写和单引号/未引用的任何变体。


3
投票

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

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

一个是假的:

<textarea></textarea>

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

拼写检查[HTML5]

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


0
投票

2.4.2。布尔属性

许多属性是布尔属性。元素上存在布尔属性表示真值,缺少属性表示false值。

如果该属性存在,则其值必须是空字符串,或者是属性的规范名称的ASCII不区分大小写匹配的值,没有前导或尾随空格。布尔属性不允许使用值“true”和“false”。要表示错误值,必须完全省略该属性。

示例:以下是选中和禁用的复选框的示例。 checked和disabled属性是布尔属性。

<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它也可能对你有所帮助。


-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);

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

另见:

C.如果从JavaScript继承HTMLElement,则可以定义与String不同类型的自定义属性。另见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>
© www.soinside.com 2019 - 2024. All rights reserved.