Подтвердить что ты не робот

RemoveAttr() не удаляет атрибут "disabled" в IE

var disableSelection = function(){
    $("#elementId").attr("disabled","disabled");    
};

var enableSelection = function(){
    $("#elementId").removeAttr("disabled");
};

У меня следующие требования:

  • отключить элемент SELECT, чтобы запретить пользователям выбирать параметры
  • отключен. Элемент SELECT имеет уже выбранный элемент OPTION.
  • on submit event enable отключить элемент SELECT, чтобы сохранить выбранное значение

Добавление атрибута "отключено" хорошо работает для IE. Тем не менее, когда я пытаюсь удалить атрибут с помощью метода jQuery revomeAttr(), вместо удаления атрибута:

  • добавляет атрибут "disabled" к ранее включенному элементу SELECT
  • метод не удаляет атрибут "disabled"
4b9b3361

Ответ 1

Используйте .prop вместо .attr повлиять на состояние отключенного элемента:

var disableSelection = function(){
    $("#elementId").prop("disabled", true);    
};

var enableSelection = function(){
    $("#elementId").prop("disabled", false);
};

Для получения дополнительной информации см. .prop() vs .attr().

Ответ 2

Вместо этого вы можете использовать removeProp('disabled'). Это работало для меня, а removeAttr('disabled') не было.

Ответ 3

JQuery Docs говорит о .removeProp():

Примечание. Не используйте этот метод для удаления собственных свойств, таких как отмеченные, отключенные или выбранные. Это полностью удалит свойство и, после удаления, снова не будет добавлено к элементу. Используйте .prop(), чтобы вместо этого установить эти свойствa > в false.

Дополнительные примечания:

В Internet Explorer до версии 9 использование .prop() для установки свойства DOM > для чего-либо, кроме простого примитивного значения (число, строка или > логическое), может вызвать утечку памяти, если свойство не удалено (используя > .removeProp()) перед удалением элемента DOM из документа. Чтобы безопасно > установить значения на объектах DOM без утечек памяти, используйте .data().