为什么将"disabled"属性设置为false也会删除"disabled"属性?

Šim*_*das 3 html javascript forms dom

我有一个最初禁用的按钮:

<button disabled="disabled">Lorem ipsum</button>
Run Code Online (Sandbox Code Playgroud)

对于此按钮,button.getAttribute('disabled')返回"disabled".但是,当我使用JavaScript启用此按钮时:

button.disabled = false;
Run Code Online (Sandbox Code Playgroud)

然后button.getAttribute('disabled')开始返回null.

现场演示: http ://jsfiddle.net/Rhj3c/1/

这是为什么?不应该.getAttribute()从原始HTML源代码返回值?然后,我如何确定原始HTML源代码中的按钮是否被禁用?

Ry-*_*Ry- 5

不应该.getAttribute()从原始HTML源代码返回值?

不,按照规范(强调我的):

如果反射IDL属性是boolean属性,那么在获取IDL属性时,如果设置了content属性,则必须返回true,如果不存在,则返回false.在设置时,如果IDL属性设置为false,则必须删除content属性,如果IDL属性设置为true,则必须将其设置为空字符串.(这对应于布尔内容属性的规则.)

然后,我如何确定原始HTML源代码中的按钮是否被禁用?

在更改之前检查它.如果问题实际上仅限于"原始HTML源代码"而不是"元素最初是什么"(例如,如果它是在JavaScript中创建的),那可能只是:

var originallyDisabled = Array.prototype.slice.call(
    document.querySelectorAll('[disabled]')
);
?
if (originallyDisabled.indexOf(button) !== -1) {
    …
}
Run Code Online (Sandbox Code Playgroud)

  • @ŠimeVidas:更有趣的是,对于`button`元素,更改`.value`属性*会更新``value'`属性,与`input`元素不同.http://jsfiddle.net/Rhj3c/5/ (2认同)