Невозможно установить disabled = false (javascript)

У меня есть эта функция:

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);

Если вам нужно больше информации, просто дайте мне знать ...

Спасибо

10
задан Marcel Korpel 24 August 2010 в 14:25
поделиться

4 ответа

Отредактировано с учетом комментариев.

Согласно W3C, код, который вы разместили, должен быть правильным. Атрибут disabled является логическим атрибутом. Использование метода removeAttribute() также может быть полезным.

По моему опыту, вы также можете добиться этого эффекта, используя строковые значения 'disabled' или ''. Это может работать, потому что эти значения преобразуются в логическое представление, когда браузер их встречает.

22
ответ дан 3 December 2019 в 14:05
поделиться

Чтобы отключить элементы, вам нужно использовать атрибут 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 соответственно.

7
ответ дан 3 December 2019 в 14:05
поделиться

попробуйте .disabled = null или .removeAttribute ('disabled') . Насколько я понимаю, инвалидность определяется наличием или отсутствием атрибута disabled , а не его значением.

5
ответ дан 3 December 2019 в 14:05
поделиться

Необходим дополнительный код. Все выглядит правильно, и установка свойства disabled элемента на логическое значение (правильный подход) определенно работает в Firefox, независимо от наличия или отсутствия disabled атрибут в исходном HTML.

3
ответ дан 3 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: