Не могу установить отключено = ложь (JavaScript) - PullRequest
10 голосов
/ 24 августа 2010

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

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'" или "disabled = true"?

Есть ли какие-либо советы по устранению неполадок?

Вот как я вызываю функцию:

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

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

Спасибо

Ответы [ 4 ]

22 голосов
/ 24 августа 2010

Отредактировано для отражения комментариев.

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

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

6 голосов
/ 24 августа 2010

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

5 голосов
/ 24 августа 2010

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

3 голосов
/ 24 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...