2010-05-13 204 views
4

我有一個輸入標籤。此標記沒有關閉自動完成功能,因此,您不一定需要釋放一個鍵才能更改此字段的值並關注另一個。我的問題是:如何檢測此特定字段的任何值更改,如e。 G。關於更改值的HTML輸入

<input onvaluechange="//do following..." /> 

JavaScript的屬性onchange不火價值變動,只有像模糊,焦點等的變化......

編輯:這也不一定是按鍵。由於自動完成,用戶只需鼠標單擊自動完成結果即可更改該值。這不會觸發onkeydown事件。

回答

11

它也並不一定是按鍵。由於自動完成

...和許多其他非基於鍵的操作,如右鍵單擊剪切/粘貼,拖放,撤消/重做,拼寫檢查調整等。

HTML5定義了一個oninput事件來捕獲所有直接更改。

不幸的是,瀏覽器今天的支持不存在(在IE中不支持,並且其他錯誤),所以如果你真的需要檢測到輸入值的所有變化早於onchange即可使用setInterval添加一個不斷與前一個值進行比較的輪詢器。

+0

從未來閱讀,非常感謝。 – 2017-04-08 21:31:08

1

可以使用onKeyPress屬性來監視用戶輸入的變化。

例如:

<input type='input' onKeyPress='SomeScriptMethod();'> 
+0

例如...? – Krinkle 2012-08-27 14:34:03

+0

這仍然不適用於自動完成或使用鼠標剪切/粘貼文本。 – 2012-11-20 18:32:29

2

我有一個類似的問題,綁定到十幾個不同的事件只是不削減它,因爲有很多不同的方式來改變輸入值,因爲bobince指出。

所以 - 我最終寫了死的簡單的jQuery監控插件,這是本質上通用的。 有了它,你可以監視輸入值發生變化,textarea的文字變化,格內容的變化,等:

https://github.com/nixd3v/monitor

跟蹤格內容的變化:

$.monitor('add', function(){return $("div#someDiv").html()}, function(){ 
    console.log('Div content changed'); 
}); 

跟蹤輸入值發生變化:

$.monitor('add', function(){return $("#password").val()}, function(){ 
    console.log('input value changed'); 
}); 

它還使用過程中的一環,但不是通過的setInterval,而是通過使用setTimeout的具有自執行的匿名函數一起:

(function(){ 
    // do some stuff 
    setTimeout(arguments.callee, 100); 
})(); 

這裏做的事情 - 這保證,下一次調用在代碼執行之前未做出。如果您在代碼中使用輪詢 - 這是正確的方式。

+0

我的尊重;)目前,但是,我沒有訪問一臺電腦,我可以測試它:( – arik 2011-08-07 20:57:45

+2

這個github項目不再存在。 – 2012-11-20 18:30:16