Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 设置假值与删除属性_Html_Boolean - Fatal编程技术网

Html 设置假值与删除属性

Html 设置假值与删除属性,html,boolean,Html,Boolean,我读了一些关于布尔属性的内容,它说对于布尔属性(在这个特定的例子中,的循环属性),无论您设置了什么值,它都将被识别为“true”。为了真正设置为falsy,您不能像loop=false那样设置它,也不能将javascript设置为['loop']=false,但必须删除该属性,例如通过执行removeAttribute('loop')。这是真的吗 我起初相信它,但就用Chrome检查而言,似乎设置为['loop']=false实际上会使它被识别为falsy。我不确定这一事实在交叉浏览时有多有力。

我读了一些关于布尔属性的内容,它说对于布尔属性(在这个特定的例子中,
循环
属性),无论您设置了什么值,它都将被识别为“true”。为了真正设置为falsy,您不能像
loop=false
那样设置它,也不能将javascript设置为
['loop']=false
,但必须删除该属性,例如通过执行
removeAttribute('loop')
。这是真的吗


我起初相信它,但就用Chrome检查而言,似乎设置为
['loop']=false实际上会使它被识别为falsy。我不确定这一事实在交叉浏览时有多有力。浏览器之间有什么区别吗?

这里解释了布尔属性:

某些属性扮演布尔变量的角色(例如,选定的 选项元素的属性)。它们在开始标记中的外观 元素的值表示该属性的值为“true”。他们的 缺席意味着“假”值

布尔属性可以合法地接受单个值:属性的名称 属性本身(例如,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中没有像javascript中那样的真正的布尔值(或
NULL
value)。

所以将来需要它的人:


loop=false
将保持
true
,除非整个
loop
属性被删除。基本上,只存在
循环
是标记需要做的其他事情。您需要使用类似jQuery的方法来删除entier
循环
属性(或者至少我会这么做)。现在,如果将不同的未定义属性设置为
false
,则可以将其识别为
false

,这会混淆字符串和真正的布尔类型。Javascript有一个布尔数据类型,有两个可能的值true和false(不带引号)。字符串可以包含任何文本,也可以包含带引号的“true”和“false”。将属性设置为非null和非false将生成true,因此将满足以下条件:

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的相似之处。

音频元素是HTML5元素,因此关于其含义,您应该参考HTML5草稿。在本例中,请参见WHATWG草案的开发者版本中的。实际上,它表示a)属性的存在或不存在决定了DOM属性值是
true
还是
false
,b)作为文档的要求,该值必须为空或(不区分大小写)属性名称,在本例中为
loop='
loop=“loop”
。在值周围使用引号是在别处定义的

因此,浏览器需要识别
loop=false
来表示与
loop=loop
loop=true
相同的意思,但作者不得使用此类结构,HTML5检查程序会发出关于它们的错误消息

(基本上,您应该在HTML5的HTML序列化中使用
loop
,在XHTML序列化中使用
loop=“loop”

因此,如果在JavaScript中有一个变量
x
,其值为
audio
元素对象,
x.loop
的值为
true
false
,而
x.attributes['loop'].value
表示HTML标记中使用的值(通常不感兴趣)


Firefox还有一个更复杂的问题:它似乎仍然不支持
循环
属性(参见问题)。这意味着,如果您设置例如
loop=“loop”
x.attributes['loop'].value
将是
loop
,但Firefox甚至没有设置
x.loop
(即它是
未定义的
),更不用说实现功能了。

我更喜欢这样的词,将值存在视为真,这样做比设置为假更安全。-他实际上指的是其中的HTML部分,而不是JS。这个问题没有正确标记是的,对不起。误解了这个问题嘿,这不是因为我读得不够仔细。。。这种情况下,它被标记为“javascript”!我是通过javascript来实现的,我区分了
false
“false”
。感谢您的补充,但我知道在html中,它们被解释为字符串。这就是我提到javascript的原因。在javascript中,我可以做类似于
['loop']=false
的事情,而
false
周围没有引号,这与
['loop']=false
不同。你的回答很有帮助。@sawa:那么对附录的事很抱歉。我从未在javascript中看到过类似于
['loop']=false
的东西,可能是
element.loop=false
。不知道你从哪里得到的语法?我是艾尔斯