无法设置disabled = false(javascript)

时间:2010-08-24 14:04:19

标签: javascript html forms

我有这个功能:

function disableDiv(divId, action){
    var divId = byId(divId);

    if(action==true){
    divId.style.display='none';
    }
    else if(action==false){
    divId.style.display='block';
    }

    var inputs = divId.getElementsByTagName("input");
    var selects = divId.getElementsByTagName("select");
    var i;

    for (i=0; i<inputs.length; i++){
        inputs[i].disabled=action;
        }

    for (i=0; i<selects.length; i++){
        selects[i].disabled=action;
        }
}

这需要divId(ID为DIV)和动作(false或true)并获取div中的所有输入和选择,并将其disabled属性设置为false或true。

根据Firebug,Div内部的元素一直处于禁用状态。但是一旦点击下拉列表选项,它们应该是活动的...触发很好所以你知道。 我可以通过使用警告框看到这个函数被调用,实际上它确实设置了disabled = false。但元素仍然被禁用。

需要指出的是,根据firebug,disabled属性如下所示:

    <input name="test" id="test" disabled="">

请注意,只有两个双引号...不应该说“禁用='禁用'”或“禁用=真”?

有关如何进一步排查问题的任何提示?

以下是我如何调用该函数:

(category=="Cars")?disableDiv("nav_sub_cars", false):disableDiv("nav_sub_cars", true);

如果您需要更多输入,请告诉我......

由于

4 个答案:

答案 0 :(得分:22)

编辑以反映评论。

根据W3C,您发布的代码应该是正确的。 disabled属性是布尔属性。使用removeAttribute()方法也可能有所帮助。

根据我的经验,您也可以使用字符串值'disabled'或''来实现此效果。这可能有效,因为当浏览器遇到这些值时,这些值被强制转换为布尔表示。

答案 1 :(得分:6)

要停用元素,您需要使用属性disabled = "disabled"而不是truefalse。要再次启用它,您需要删除disabled属性。像这样修改你的代码:

for (i=0; i<inputs.length; i++){
  if (action === false) {
    inputs[i].removeAttribute('disabled');
  }
  else {
    inputs[i].setAttribute('disabled', 'disabled');
  }
}

for (i=0; i<selects.length; i++){
  if (action === false) {
    selects[i].removeAttribute('disabled');
  }
  else {
    selects[i].setAttribute('disabled', 'disabled');
  }
}

setAttributeremoveAttribute函数分别用于设置和删除disabled属性。

答案 2 :(得分:5)

尝试.disabled = null.removeAttribute('disabled')。我的理解是,disabled属性的存在与否决定了残疾,而不是它的价值。

答案 3 :(得分:3)

需要更多代码。一切看起来都正确,并且将disabled元素的<input>属性设置为布尔值(正确的方法)肯定适用于Firefox,无论是否存在disabled属性来源HTML。