我已经读到您可以简单地通过附加disable
到其标签来禁用(使物理无法点击)HTML 按钮,但不能作为属性,如下所示:
<input type="button" name=myButton value="disable" disabled>
由于此设置不是属性,如何通过 JavaScript 动态添加它以禁用以前启用的按钮?
我已经读到您可以简单地通过附加disable
到其标签来禁用(使物理无法点击)HTML 按钮,但不能作为属性,如下所示:
<input type="button" name=myButton value="disable" disabled>
由于此设置不是属性,如何通过 JavaScript 动态添加它以禁用以前启用的按钮?
由于此设置不是属性
它是一个属性。
某些属性被定义为布尔值,这意味着您可以指定它们的值,而将其他所有内容排除在外。ie 而不是 disabled=" disabled ",你只包括粗体部分。在 HTML 4 中,您应该只包含粗体部分,因为完整版本被标记为支持有限的功能(尽管现在编写规范时不太正确)。
从 HTML 5 开始,规则发生了变化,现在您只包含名称而不包含值。这没有实际区别,因为名称和值是相同的。
该DOM属性也被称为disabled
并且是采用布尔true
或false
。
foo.disabled = true;
从理论上讲,您也可以foo.setAttribute('disabled', 'disabled');
和foo.removeAttribute("disabled")
,但我不相信旧版本的 Internet Explorer(当涉及到 时,它们是出了名的错误setAttribute
)。
禁用
document.getElementById("btnPlaceOrder").disabled = true;
启用
document.getElementById("btnPlaceOrder").disabled = false;
它是一个属性,但是一个布尔值(所以它不需要名称,只需要一个值——我知道,这很奇怪)。您可以在 Javascript 中设置等效的属性:
document.getElementsByName("myButton")[0].disabled = true;
请尝试以下操作:
document.getElementById("id").setAttribute("disabled", "disabled");
disabled
在 an上设置属性的官方方法HTMLInputElement
是这样的:
var input = document.querySelector('[name="myButton"]');
// Without querySelector API
// var input = document.getElementsByName('myButton').item(0);
// disable
input.setAttribute('disabled', true);
// enable
input.removeAttribute('disabled');
虽然@kaushar 的答案足以启用和禁用HTMLInputElement
,并且由于 IE 历史上的错误setAttribute
,它可能更适合跨浏览器兼容性,但它仅适用于Element
属性隐藏Element
属性。如果设置了属性,则 DOM 默认使用该属性的值,而不是等效属性的值。
属性和属性之间有一个非常重要的区别。一个真实HTMLInputElement
属性的例子是input.value
,下面演示了阴影是如何工作的:
var input = document.querySelector('#test');
// the attribute works as expected
console.log('old attribute:', input.getAttribute('value'));
// the property is equal to the attribute when the property is not explicitly set
console.log('old property:', input.value);
// change the input's value property
input.value = "My New Value";
// the attribute remains there because it still exists in the DOM markup
console.log('new attribute:', input.getAttribute('value'));
// but the property is equal to the set value due to the shadowing effect
console.log('new property:', input.value);
<input id="test" type="text" value="Hello World" />
这就是说属性隐藏属性的意思。这个概念也适用于prototype
链上的继承属性:
我希望这可以澄清有关属性和属性之间差异的任何混淆。