2014-05-16 38 views
2

我无法找到一个确定的答案,以便如何使用禁用属性来禁用JavaScript中的表单元素。DOM中'禁用'属性在javascript中

有些地方说这是一个简单的布尔值。其他人说,将其设置为禁用字符串值'禁用',空字符串''启用。或者有添加和删除禁用的属性,通常结合字符串值。

那么跨浏览器的正确方法是什么? (没有jQuery)。 像启用标志这样简单的事情如何被屠杀?

- 编辑 -

对不起,我应该提到我开发IE8(不选择)。

+1

它没有被屠杀。你只需要了解属性和属性之间的区别。 –

+0

我不同意。决定禁用属性而不是属性是错误。 – Legion

+1

这不是一个或另一个问题。 HTML具有属性。 DOM具有属性,属性分别建模。许多HTML属性被转换为DOM元素属性。这就是你需要了解差异的地方。 –

回答

9

下列输入元件都是禁用:

<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 

的属性将更新属性为您服务。这是所有的布尔属性/属性对真,即:readonlycheckedselected

混乱可能来自一个事实,即setAttribute()询问双方的名称和值,并在key="value"格式 - 即使当发射标记干你不想要价值。当添加自定义布尔属性,我简单地设置该属性没有值(sample):

input.setAttributeNode(document.createAttribute("data-custom")); 
console.log(input); // <input data-custom> 

document. createAttribute()Element. setAttributeNode()

+0

这里没有javascript –

+2

特别注意最后一个HTML例子。 ''基本上是对你说谎的HTML。不要这样做。避免'disabled ='true'',即使只是为了避免'好的,如果'true''禁用它的思维过程......“。 – cHao

+0

@colin谎言,所有的谎言。 – canon

1

该属性的存在足以触发禁用状态。

如果您必须为属性设置值,那么它应该与属性名称相同,例如disabled="disabled"

我会尝试找到一些有关浏览器的特定行为和相关规范的文档。

- 编辑 -

HTML5规范包括布尔属性,比如残疾人,在这里:http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attributes

在实践中,Web浏览器会忽略指定的值,并简单地查找属性的存在。

1

disabled属性是一个布尔值。如果标签存在,输入将被禁用。围绕与它相关的字符串值的混淆通常来自XHTML验证。在XHTML属性中最小化是禁止的,所以它必须有一个值,而XHTML规范说明它必须是disabled="disabled"

对于任何浏览器,如果存在标记,则无论字符串值如何,输入都将被禁用。

JsFiddle Demo

w3c disabled attribute spec

0

禁用设置为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>