2011-11-17 100 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); 
    } 
});