У меня есть эта функция:
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 (идентификатор DIV) и действие (false или true) и получает все вводит и выбирает внутри div, и устанавливает их атрибут disabled как false или true.
Согласно Firebug, элементы внутри Div постоянно отключены. Но они должны быть активны, когда вы нажимаете опцию в выпадающем списке. Я вижу, что эта функция вызывается с помощью окон предупреждений, и она на самом деле устанавливает disabled = false. Но элементы все еще отключены.
Следует отметить, что в соответствии с firebug атрибут disabled выглядит следующим образом:
<input name="test" id="test" disabled="">
Обратите внимание, что есть только две двойные кавычки ... Разве это не должно сказать "disabled = 'disabled" "or" disabled = true "?
Любые советы о том, как устранить неполадки?
Вот как я вызываю функцию:
(category=="Cars")?disableDiv("nav_sub_cars", false):disableDiv("nav_sub_cars", true);
Если вам нужно больше информации, просто дайте мне знать ...
Спасибо
Отредактировано с учетом комментариев.
Согласно W3C, код, который вы разместили, должен быть правильным. Атрибут disabled является логическим атрибутом. Использование метода removeAttribute()
также может быть полезным.
По моему опыту, вы также можете добиться этого эффекта, используя строковые значения 'disabled' или ''. Это может работать, потому что эти значения преобразуются в логическое представление, когда браузер их встречает.
Чтобы отключить элементы, вам нужно использовать атрибут 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
соответственно.
попробуйте .disabled = null
или .removeAttribute ('disabled')
. Насколько я понимаю, инвалидность определяется наличием или отсутствием атрибута disabled
, а не его значением.
Необходим дополнительный код. Все выглядит правильно, и установка свойства disabled
элемента на логическое значение (правильный подход) определенно работает в Firefox, независимо от наличия или отсутствия
disabled
атрибут в исходном HTML.