2012-04-25 36 views
4

每當輸入控件中的文本發生變化時,我都需要立即更新一些內容。但我似乎無法爲此找到正確的事件。什麼是正確的JavaScript事件的文本輸入控件中的任何文本更改?

  • onchange僅當您離開輸入框時(即標籤離開或外部點擊)纔會觸發。

  • onkeypress事件火災之前做出更改,並觸發對任何按鍵(如也光標離開&不會引起任何文本更改右)

  • 的onkeydown還火的onkeyup上任何鍵(甚至像移等,不會引起任何文本變更)

而且,這些都不似乎火的時候,右擊+粘貼從用鼠標剪貼板。或者當從JS內部改變值時(即,在其他地方做input.value = something)。

小例子:http://jsfiddle.net/nggAm/

我該怎麼辦?我想我可以解決這個問題的一種方式(主要是)將所有事件設置爲一個通用事件處理程序,將值緩存到那裏,並且只在字符串更改時進行實際更新。但這感覺有點蹩腳。什麼是正確的這樣做?

+0

不幸的是,[突變事件(https://developer.mozilla.org/en/DOM/Mutation_events)既不是跨瀏覽器也不推薦。 – 2012-04-25 06:53:06

回答

1

對於較老的瀏覽器,您需要設置輸入的onkeyup和onchange以及onpaste。do需要設置輸入的onkeyup和onchange和onpaste。

但是新的瀏覽器有輸入,這是你希望每個瀏覽器都有。

您可以設置所有的事件,然後刪除一切,但在輸入時如果輸入發生火災。

(但IE9與通過輸入事件,如果你退格或刪除字符,所以離開的關鍵事件只是該瀏覽器的一個問題。)

示例代碼引導所有事件到一個處理程序,除去如果oninput火災

F.text1.oninput= function(){ 
    F.text1.onpaste= F.text1.onchange= null; 
    if(!document.documentMode) F.text1.onkeyup= null; 
    F.text1.oninput= F.limiter; 
    return F.limiter(); 
} 
F.text1.onpaste= function(){ 
    setTimeout(F.limiter, 100); 
} 
F.text1.onkeyup= F.text1.onchange= F.limiter;