$('form :input[type="text"]').live('keyup', function() {
var val = $.trim(this.value); // this.value is faster than $(this).val()
$('form .create-playlist-button').prop('disabled', val.length == 0);
});
デモ
ここでは、jQuery docを使用する必要があるため、.prop()
代わりに を使用しました。また、値の先頭と末尾から空白を削除するためにも使用しました。.attr()
.prop()
.trim()
コードについて
あなたのコードでは$('form :input[type="text"]')
、2 回使用しました。1 つは bind イベント用で、もう 1 つはテキスト フィールドの値を取得するためです。ただし、keyup
イベント ハンドラー関数内では、イベントがバインドされた要素this
を参照するため、これは必須ではありません。input
keyup
何らかの目的でセレクターを複数回使用する必要がある場合は、それを変数にキャッシュして、その変数を再利用することをお勧めします。ちょうど例:
var input = $('form :input[type="text"]');
input.on('click', function() {
alert( this.value );
input.addClass('something');
});
for delegate イベント ハンドラ.on()
の代わりに使用した方がよい場合は、非推奨になったためです。.live()
.live()
.on()
次のように使用できます。
$('form').on('keyup', ':input[type="text"]', function() {
var val = $.trim(this.value);
$('form .create-playlist-button').prop('disabled', val.length == 0);
});
ノート
.on()
デリゲート イベント処理の構文は次のようになります。
$(staticContainer).on( eventName, target, handlerFunction )
ここで、staticContainer
ページの読み込み時に DOM に属する要素、つまり動的ではなくtarget
、イベントをバインドするコンテナーでもある要素をポイントします。
もう少しだけここに行く