我无法找到一个确定的答案,以便如何使用禁用属性来禁用JavaScript中的表单元素。DOM中'禁用'属性在javascript中
有些地方说这是一个简单的布尔值。其他人说,将其设置为禁用字符串值'禁用',空字符串''启用。或者有添加和删除禁用的属性,通常结合字符串值。
那么跨浏览器的正确方法是什么? (没有jQuery)。 像启用标志这样简单的事情如何被屠杀?
- 编辑 -
对不起,我应该提到我开发IE8(不选择)。
我无法找到一个确定的答案,以便如何使用禁用属性来禁用JavaScript中的表单元素。DOM中'禁用'属性在javascript中
有些地方说这是一个简单的布尔值。其他人说,将其设置为禁用字符串值'禁用',空字符串''启用。或者有添加和删除禁用的属性,通常结合字符串值。
那么跨浏览器的正确方法是什么? (没有jQuery)。 像启用标志这样简单的事情如何被屠杀?
- 编辑 -
对不起,我应该提到我开发IE8(不选择)。
下列输入元件都是禁用:
<input disabled />
<input disabled="" />
<input disabled="disabled" />
<input disabled="true" />
<input disabled="false" /> <!-- still disabled! -->
如果布尔属性存在时,它的上;否则,它关闭。价值并不意味着什么。
然而,通过JavaScript这些元素打交道时,你应该使用相应的财产,即:
myInput.disabled = true; // adds the attribute and disables control
myInput.disabled = false; // removes the attribute and enables control
的属性将更新属性为您服务。这是所有的布尔属性/属性对真,即:readonly
,checked
,selected
等
混乱可能来自一个事实,即setAttribute()
询问双方的名称和值,并在key="value"
格式 - 即使当发射标记干你不想要价值。当添加自定义布尔属性,我简单地设置该属性没有值(sample):
input.setAttributeNode(document.createAttribute("data-custom"));
console.log(input); // <input data-custom>
见document. createAttribute()
和Element. setAttributeNode()
。
该属性的存在足以触发禁用状态。
如果您必须为属性设置值,那么它应该与属性名称相同,例如disabled="disabled"
。
我会尝试找到一些有关浏览器的特定行为和相关规范的文档。
- 编辑 -
HTML5规范包括布尔属性,比如残疾人,在这里:http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attributes
在实践中,Web浏览器会忽略指定的值,并简单地查找属性的存在。
DOM元素的.disabled
property是一个布尔值,应该分配布尔值。
的disabled
HTML属性,如在标记或setAttribute()
,是一个"boolean html attribute"这意味着它可以取值为空,disabled
或省略。另见HTML - Why boolean attributes do not have boolean value?和Correct value for disabled attribute。
disabled
属性是一个布尔值。如果标签存在,输入将被禁用。围绕与它相关的字符串值的混淆通常来自XHTML验证。在XHTML属性中最小化是禁止的,所以它必须有一个值,而XHTML规范说明它必须是disabled="disabled"
。
对于任何浏览器,如果存在标记,则无论字符串值如何,输入都将被禁用。
禁用设置为true可用于所有输入类型。我已经在铬,Firefox,即边缘尝试过。尝试这个;
<!doctype html>
<html lang="en">
<body>
<input type="text" class="disableit">
<textarea class="disableit"></textarea>
<input type="radio" class="disableit">
<select class="disableit"><option>one</option><option>two</option>
<input type="checkbox" class="disableit">
<script>
var inputs = document.getElementsByClassName("disableit");
for(var i = 0; i < inputs.length; i++){
inputs[i].disabled = true;
}
</script>
</body>
</html>
它没有被屠杀。你只需要了解属性和属性之间的区别。 –
我不同意。决定禁用属性而不是属性是错误。 – Legion
这不是一个或另一个问题。 HTML具有属性。 DOM具有属性,属性分别建模。许多HTML属性被转换为DOM元素属性。这就是你需要了解差异的地方。 –