只需使用.change
事件。
更新:如果您想要实时更改通知,那么您是否必须通过keyup
事件,这意味着您需要对处理程序进行编程以忽略那些不会导致值被修改的键。
您可以使用忽略的键代码白名单来实现这一点,但它可能会变得丑陋:按下Del会导致值被更改,除非光标位于输入的末尾,在这种情况下它不会,除非碰巧是输入中的选定范围,在这种情况下它确实如此。
如果不是“纯粹”的话,我个人认为更理智的另一种方法是对您的处理程序进行编程以记住元素的旧值,并且只有在它发生变化时才做出反应。
$(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
。从技术上讲,这将具有使代码变慢的缺点,但我相信没有人会注意到。
看到它在行动。