2011-11-17 67 views
1

基于这样一个问题:输入值变化检测使用类

Jquery input value change detection

我有input 1input 2,用value='100'

如果我改变input 1值,警报显示,值变化,perfet。

但是,如果我再次输入并失去焦点(我正在使用focusout()),警报将继续显示值再次发生变化,也许是因为我在使用类。

我不能把这个工作,我失踪了?

HTML

<input type="text" value="100" class="inputTest" /> 
<input type="text" value="100" class="inputTest" /> 

JS:

$(".inputTest").focusout(function(){ 
    if(this.value != this.defaultValue){ 
     alert('changed'); 
    } 
}); 

做了live example

谢谢。

+0

你找'默认值()'和'VAL()' – run

+1

我不太清楚,是什么问题。如果该值不同于100,警报将始终触发。如果要测试新值是否与前一值不同,则需要一个变量来保存当前值。或者你使用MVC框架(如果你的项目比较大,你需要很多这个)。 –

回答

3

使用data()方法来存储放入input的最后一个值。然后你可以改变你的逻辑来测试这个,而不是默认值。

$(".inputTest").each(function() { 
    $(this).data("lastValue", this.value); 
}) 

$(".inputTest").focusout(function() { 
    if (this.value != $(this).data("lastValue")) { 
     alert('changed'); 
     $(this).data("lastValue", this.value) 
    } 
}); 

Fiddle here

1

也许你应该使用更改处理程序而不是焦点处理程序。这样它只会检查值是否更改。

1

的问题是,您测试value != defaultValue对事件的内容,这显然不会为真,一旦值已经改变一次,直到再次改变。

您需要检查是否this.value != this.previousValue,并以某种方式存储该字段的以前的值。

编辑:@Rory McCrossan已经描述了如何在他的答案中做到这一点。

1

defaultValue将始终包含100.如果更改了输入框的内容,则defaultValue不会更改。

考虑保存前值:

// Initialize previousValue 
$(".inputTest").each(function() { 
    $(this).data('previousValue', this.defaultValue); 
}); 

$(".inputTest").focusout(function(){ 
    if(this.value != $(this).data('previousValue')){ 
     alert('changed'); 
     // Set previousValue again 
     $(this).data('previousValue', this.value); 
    } 
});