Этому вопросу уже 2 года, но это все еще хороший вопрос, и это был первый результат Google ... но во всех существующих ответах рекомендуется установить и удалить атрибут HTML (removeAttr ("disabled")) "disabled", что не является правильный подход. Существует много путаницы в отношении атрибута против собственности.
HTML
«Отключено» в <input type="button" disabled>
разметке называется логическим атрибутом W3C .
HTML против DOM
Quote:
Свойство находится в DOM; атрибут находится в HTML, который анализируется в DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
Связанные с:
Тем не менее, самое важное, что нужно помнить о проверенном атрибуте, это то, что он не соответствует проверенному свойству. Атрибут фактически соответствует свойству defaultChecked и должен быть использован только для установки начального значения этого флажка. Проверенное значение атрибута не изменяется с состоянием флажка, в то время как проверяемое свойство изменяется. Таким образом, кросс-браузер-совместимый способ определить, установлен ли флажок, это использовать свойство ...
Соответствующие:
Свойства обычно влияют на динамическое состояние элемента DOM без изменения сериализованного атрибута HTML. Примеры включают свойство value элементов ввода, свойство disabled входов и кнопок или свойство флажка флажка. Метод .prop () должен использоваться для установки отключенного и отмеченного вместо метода .attr ().
$( "input" ).prop( "disabled", false );
Резюме
Чтобы [...] изменить свойства DOM, такие как [...] отключенное состояние элементов формы, используйте метод .prop () .
( http://api.jquery.com/attr/ )
Что касается отключения при изменении, то часть вопроса: есть событие под названием «вход», но поддержка браузера ограничена, и это не событие jQuery, поэтому jQuery не заставит его работать. Событие изменения работает надежно, но вызывается, когда элемент теряет фокус. Таким образом, можно объединить два (некоторые люди также слушают keyup и paste).
Вот непроверенный фрагмент кода, чтобы показать, что я имею в виду:
$(document).ready(function() {
var $submit = $('input[type="submit"]');
$submit.prop('disabled', true);
$('input[type="text"]').on('input change', function() { //'input change keyup paste'
$submit.prop('disabled', !$(this).val().length);
});
});