在HTML中显式设置disabled=“false”无效

我想在html文件中将按钮显式设置为启用。原因是我的代码稍后会将按钮切换到禁用状态,如果代码崩溃,我可能会看到按钮被禁用

我可以用鼠标禁用按钮

$(“#btn”).attr(“禁用”、“真实”)

但是一个html包含:

<按钮id=“btn”disabled=“false”>我想被启用&lt/按钮>

仍将按钮显示为已禁用。
检查员显示:

<按钮id=“btn”已禁用=”“>我想被启用&lt/按钮>

我知道我能行

$(“#btn”).removeAttr(“禁用”)

或者类似的,但是对于html中的许多元素,这样做并不方便

令人惊讶的是,HTML对布尔属性不使用布尔值

在HTML中,布尔属性是通过仅仅添加属性名来指定的,或者(特别是在XHTML中)通过使用属性名作为其值来指定的

<输入类型="复选框“;残疾人士&gt<!--HTML-->
<输入类型="复选框“;残疾/&gt<!--还有HTML-->
<输入类型="复选框“;已禁用=”;残疾人士/&燃气轮机<!--XHTML和HTML-->

这在HTML规范中有记录:http://www.w3.org/TR/html5/infrastructure.html#boolean-属性

许多属性是布尔属性。元素上存在布尔属性表示真值,不存在该属性表示假值

价值观;“真的”;及;假;在布尔属性上不允许使用。要表示假值,必须完全忽略该属性


更令人困惑的是,在DOM中,这些布尔属性是用布尔值指定的,例如:

/**@类型HTMLInputElement*/
const inputElement=document.createElement('input');
inputElement.disabled=true;//<——DOM*确实*在这里使用了正确的布尔值。
console.log(inputElement.disabled);//印刷品;“真的”;
inputElement.disabled=false;
console.log(inputElement.disabled);//印刷品;假;

…由于JavaScript的错误性,要添加甚至更多的混乱,在属性中使用字符串值将不会像您预期的那样工作:

inputElement.disabled='true';
console.log(inputElement.disabled);//印刷品;“真的”;
inputElement.disabled='false';
console.log(inputElement.disabled);//*静物*prints"“真的”;

(这是因为JavaScript字符串'false'未被类型强制为JavaScript布尔值false


> <某些 HTML属性确实有真和 false 作为可能的值,如 CordeNealEdaby/Cl>(也有继承作为第三选项),也考虑表单自动完成=&quot&引用&燃气轮机可以是打开关闭(以及许多其他值),这可能也会让一些人绊倒我认为一些传统的(Internet Explorer 4.0时代)扩展,如&lt;对象&gt和&lt;小程序&gt可能具有布尔属性,并且在其子对象中肯定具有布尔属性&lt;参数值=&quot&引用&燃气轮机属性,这只是一个历史性的好奇心。)

发表评论