.change
イベントを使用するだけです。
更新:ライブ変更通知が必要な場合は、keyup
イベントを実行する必要がありますか。つまり、値が変更されないキーを無視するようにハンドラーをプログラムする必要があります。
無視されるキーコードのホワイトリストを使用してこれを実装できますが、醜くなる可能性がDelあります。カーソルが入力の最後に配置されていない限り、値が変更されます。入力で選択された範囲であり、その場合はそうなります。
私が個人的に「純粋」ではないにしてももっと正気だと思うもう1つの方法は、要素の古い値を記憶し、それが変更された場合にのみ反応するようにハンドラーをプログラムすることです。
$(function() {
// for each input element we are interested in
$("input").each(function () {
// set a property on the element to remember the old value,
// which is initially unknown
this.oldValue = null;
}).focus(function() {
// this condition is true just once, at the time we
// initialize oldValue to start tracking changes
if (this.oldValue === null) {
this.oldValue = this.value;
}
}).keyup(function() {
// if no change, nothing to do
if (this.oldValue == this.value) {
return;
}
// update the cached old value and do your stuff
this.oldValue = this.value;
alert("value changed on " + this.className);
});
});
DOM要素に直接プロパティを設定したくない場合(実際には、何も問題はありません)、表示されたときに代わり$(this).data("oldValue")
に使用できます。this.oldValue
これには技術的にコードが遅くなるという欠点がありますが、誰も気付かないと思います。
実際の動作をご覧ください。