Цьому питанню 2 роки, але це все ще гарне запитання, і це був перший результат Google ... але всі існуючі відповіді рекомендують встановити та видалити атрибут HTML (deleteAttr ("вимкнено")) "вимкнено", а це не правильний підхід. Існує велика плутанина щодо атрибута проти властивості.
HTML
W3C "відключений" у <input type="button" disabled>
розмітці називається булевим атрибутом .
HTML проти DOM
Цитата:
Власність знаходиться в DOM; атрибут знаходиться в HTML, який розбирається в DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
Пов'язані:
Тим не менш, найважливіша концепція, яку слід пам’ятати про перевірений атрибут, - це те, що він не відповідає перевіреному властивості. Атрибут фактично відповідає властивості defaultChecked і повинен бути використаний тільки для установки початкового значення цього прапорця. Значення зареєстрованого атрибута не змінюється зі станом прапорця, тоді як властивість, що перевіряється, робить. Таким чином, сумісний з переглядачем браузер спосіб визначити, чи прапорець встановлений, - це використовувати властивість ...
Відповідне:
Властивості, як правило, впливають на динамічний стан елемента DOM, не змінюючи серіалізований атрибут HTML. Приклади включають властивість значення вхідних елементів, вимкнено властивість входів та кнопок, або властивість прапорця. Метод .prop () слід використовувати для встановлення вимкнених і перевірених замість методу .attr ().
$( "input" ).prop( "disabled", false );
Підсумок
Щоб [...] змінити властивості DOM, такі як [...] відключений стан елементів форми, використовуйте метод .prop () .
( http://api.jquery.com/attr/ )
Що стосується вимкнення зміни частини запитання: Є подія під назвою "вхід", але підтримка браузера обмежена, і це не подія jQuery, тому jQuery не змусить її працювати. Подія зміни працює надійно, але запускається, коли елемент втрачає фокус. Таким чином, можна поєднати два (деякі люди також слухають клавіатуру та вставляти).
Ось неперевірений фрагмент коду, щоб показати, що я маю на увазі:
$(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);
});
});