この質問は2年前のものですが、それでも良い質問であり、最初のGoogleの結果でした...しかし、既存の回答はすべて、HTML 属性の設定と削除を推奨しています(removeAttr( "disabled"))を正しいアプローチ。属性とプロパティについては、多くの混乱があります。
HTML
<input type="button" disabled>
マークアップの「無効」は、W3Cによってブール属性と呼ばれます。。
HTMLとDOM
見積もり:
プロパティはDOMにあります。属性はHTML内にあり、DOMに解析されます。
https://stackoverflow.com/a/7572855/664132
jQuery
関連:
それでも、checked属性について覚えておくべき最も重要な概念は、checkedプロパティに対応しないことです。この属性は実際にはdefaultCheckedプロパティに対応しており、チェックボックスの初期値を設定するためにのみ使用する必要があります。checked属性値はチェックボックスの状態によって変化しませんが、checkedプロパティは変化します。したがって、チェックボックスがチェックされているかどうかを判断するためのブラウザ互換の方法は、プロパティを使用することです...
関連:
プロパティは通常、シリアル化されたHTML属性を変更せずに、DOM要素の動的な状態に影響を与えます。例には、入力要素のvalueプロパティ、入力とボタンのdisabledプロパティ、またはチェックボックスのcheckedプロパティが含まれます。.attr()メソッドの代わりに、.prop()メソッドを使用して無効化およびチェックを設定する必要があります。
$( "input" ).prop( "disabled", false );
概要
[...]フォーム要素の[...]無効状態などのDOMプロパティを変更するには、.prop()メソッドを使用します。
(http://api.jquery.com/attr/)
質問の変更時の無効化について:「入力」と呼ばれるイベントがありますが、ブラウザーのサポートが制限されていますおり、jQueryイベントではないため、jQueryはそれを機能させません。changeイベントは確実に機能しますが、要素がフォーカスを失うと発生します。そのため、2つを組み合わせることができます(一部の人々はキーアップと貼り付けも聞きます)。
これが私が何を意味するかを示すためのテストされていないコードです:
$(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);
});
});