我有这个功能:
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);
如果您需要更多输入,请告诉我......
由于
答案 0 :(得分:22)
编辑以反映评论。
根据W3C,您发布的代码应该是正确的。 disabled属性是布尔属性。使用removeAttribute()
方法也可能有所帮助。
根据我的经验,您也可以使用字符串值'disabled'或''来实现此效果。这可能有效,因为当浏览器遇到这些值时,这些值被强制转换为布尔表示。
答案 1 :(得分:6)
要停用元素,您需要使用属性disabled = "disabled"
而不是true
或false
。要再次启用它,您需要删除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');
}
}
setAttribute
和removeAttribute
函数分别用于设置和删除disabled
属性。
答案 2 :(得分:5)
尝试.disabled = null
或.removeAttribute('disabled')
。我的理解是,disabled
属性的存在与否决定了残疾,而不是它的价值。
答案 3 :(得分:3)
需要更多代码。一切看起来都正确,并且将disabled
元素的<input>
属性设置为布尔值(正确的方法)肯定适用于Firefox,无论是否存在disabled
属性来源HTML。