2010-02-24 76 views
9

每次我需要寫一段JavaScript它監視的輸入框,我通常最終會做這樣的事情:是否有「texbox content changed」DOM事件?

$("#field").keyup(myHandler).keydown(myHandler).change(myHandler); 

它並不完美,但它通常在大多數情況下工作,所以我繼續前進。我恰好有一點時間正確調查這一點。可能主要的問題是不能通過鼠標完成編輯(右鍵單擊+粘貼/剪切)。另外,這不是我想要的。這捕獲所有的光標移動和我沒有真正感興趣的其他鍵盤事件,這樣的問題是:

有其輸入的內容或在每次發射可靠的跨瀏覽器事件textarea的變化?

在一個簡短的搜索過程中,我發現了onpropertychange和DOMAttrModified事件。但除了它們不適用於所有瀏覽器,它們在編輯輸入或textarea時似乎並未被解僱。

+0

也許一個愚蠢的問題,但爲什麼'onchange'不是一個選項在這裏?它過早起火了嗎? – 2010-02-24 14:52:32

+0

它燃燒得太晚;它僅在文本框被留下時纔會觸發。 – 2010-02-24 14:54:09

回答

6

至少最新版本的Internet Explorer,Firefox,Chrome和Safari都支持cutpaste事件,這些事件在文本被剪切或粘貼到給定輸入元素後立即觸發。這些事件由鍵盤鼠標交互觸發。聽取這些和其他事件的組合應該提供您正在尋找的功能。

$("#foo").bind("keyup keydown change paste cut", handler); 

我在Firefox 3.6,鉻5.0(DEV),和Safari 4在Firefox 3.5和IE8測試這在Mac上,並在Windows上。

+0

好的提示。爲什麼不按鍵,而不是按鍵? – 2010-02-25 01:52:59

+0

取決於瀏覽器,在任何情況下都不會觸發'keypress'事件。例如,當按下Control鍵時,'keydown'和'keyup'將被觸發,但'keypress'將* not *。在這種情況下,我認爲這並不重要,但是由於OP的例子使用了'keydown'和'keyup',所以我也做了。使用'keypress'也可以在這裏工作。 – 2010-02-25 02:21:26

+0

謝謝你,非常有用的提示。另外,我不知道你可以簡單地連接這樣的事件名稱:$(「#foo」)。bind(「keyup keydown change paste cut」,handler)。 – 2010-02-25 10:07:00