当像hidden属性这样的属性是布尔属性时,它意味着什么?有人可以用外行的话来解释这个吗?
2.5.2布尔属性
许多属性是布尔属性。元素上存在布尔属性表示真值,缺少属性表示false值。
如果该属性存在,则其值必须是空字符串,或者是属性的规范名称的ASCII不区分大小写匹配的值,没有前导或尾随空格。
布尔属性不允许使用值“true”和“false”。要表示错误值,必须完全省略该属性。
如前所述,布尔属性是被评估为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">
或不区分大小写和单引号/未引用的任何变体。
正如其他人所说,布尔值有三种可能的语法:
<textarea readonly></textarea>
<textarea readonly=""></textarea>
<textarea readonly="readonly"></textarea>
一个是假的:
<textarea></textarea>
除了你有一些像这样的例外,显然:
拼写检查[HTML5]
将此属性的值设置为true表示该元素需要检查其拼写和语法。值default表示元素将根据默认行为进行操作,可能基于父元素自己的拼写检查值。值false表示不应检查该元素。
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它也可能对你有所帮助。
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"/>
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>