【发布时间】:2011-05-07 14:08:36
【问题描述】:
当隐藏属性这样的属性是布尔属性时,这是什么意思?有人可以通俗地解释一下吗?
【问题讨论】:
标签: html
当隐藏属性这样的属性是布尔属性时,这是什么意思?有人可以通俗地解释一下吗?
【问题讨论】:
标签: html
2.5.2 布尔属性
许多属性是布尔属性。一个的存在 元素上的布尔属性表示真值,并且 属性不存在代表假值。
如果属性存在,它的值必须是空字符串 或属性的 ASCII 不区分大小写匹配的值 规范名称,没有前导或尾随空格。
布尔属性不允许使用值“true”和“false”。 要表示假值,必须省略该属性 完全一致。
【讨论】:
如前所述,布尔属性是被评估为真或假的属性。
但是,来自 HTML5 规范 - http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes
2.5.2 布尔属性
许多属性是布尔属性。一个的存在 元素的布尔属性 代表真值,而 属性的缺失代表 假值。
如果属性存在,它的值必须是空字符串 或一个 ASCII 值 不区分大小写的匹配 属性的规范名称,没有 前导或尾随空格。
布尔属性不允许使用值“true”和“false”。到 表示一个假值,该属性 必须完全省略。
请注意,这意味着在 HTML5 中不允许<div hidden="true">。
正确的是 <div hidden> 或 <div hidden=""> 或 <div hidden="hidden"> 或其中任何一个不区分大小写和单引号/未加引号的变体。
【讨论】:
hidden="false" 在实践中的评估结果与 hidden 和 hidden="hidden" 相同。 (他们应该改用hidden="false" 做什么?)
正如其他人所说,布尔值具有三种可能的 true 语法:
<textarea readonly></textarea>
<textarea readonly=""></textarea>
<textarea readonly="readonly"></textarea>
还有一个 false:
<textarea></textarea>
除了你有几个像这样的例外,显然:
拼写检查 [HTML5]
将此属性的值设置为 true 表示需要检查元素的拼写和语法。值 default 表示元素将根据默认行为进行操作,可能基于父元素自己的拼写检查值。值 false 表示不应检查该元素。
【讨论】:
spellcheck 不是布尔属性。
A.基于 Bob.at.Indigo.Health 的评论:
使用一些应该表示布尔值的 html 属性(例如,复选框的checked 属性)...将其设置为 false 的唯一方法是省略该属性,:
<input type="checkbox" />
所有其他分配将被解释为true(即使这不符合 html 标准),例如。 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,您可以通过使用 null 调用 attr 函数来删除属性(“将它们设置为 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(newValue)
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>
【讨论】:
2.4.2。布尔属性
许多属性是布尔属性。一个的存在 元素上的布尔属性表示真值,并且 属性不存在代表假值。
如果属性存在,它的值必须是空字符串 或者是一个不区分大小写的 ASCII 匹配属性的值 规范名称,没有前导或尾随空格。价值 布尔属性不允许使用“true”和“false”。代表 一个 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 它也可能对您有所帮助。
【讨论】: