2011-03-31 60 views
4

我有一個帶有輸入框的頁面和一個處理此輸入框的值並生成一段文本的函數。我想這個文本始終是最新的關於輸入框的內容,所以我已經附上兩個事件將其與jQuery來捕捉任何變化:使用Javascript/jQuery捕獲輸入框內容的所有更改

$('#input').bind('keyup cut paste', function(){...}); 

這工作得很好在大多數情況下。每當用戶用任何方式使用鍵盤修改內容時,或者右鍵單擊以使用剪切或粘貼功能時,文本將立即更新。不過,也有我還沒有想出如何抓到兩個事件,如果它甚至有可能這樣做:

  • 當用戶選擇文本並拖動它做在輸入框中輸入一個不同的位置
  • 當用戶使用在右鍵快捷菜單

這兩個當然可以通過綁定change事件被檢測到的刪除操作,但這種做法的問題是,它不火,直到輸入框丟失焦點。這些綁定的要點是隨着輸入框值的變化實時更新文本,所以change不好。

英語是我的第二語言,所以我可能簡單地在我的谷歌搜索的措辭不好,但到目前爲止他們什麼都沒有。在挖掘了一些相關的SO頁面之後,我還沒有找到任何解決方案,所以我在這裏問。有沒有一個我不知道的綁定事件?如果不是,我可以採取不同的方法嗎?或者,這是簡單的不可能與平原的Javascript?

+1

我從來不會知道英語是你的第二語言,所以我覺得這不是問題;) – rockerest 2011-03-31 02:17:36

回答

7

在非IE瀏覽器,你可以處理input事件。
在IE中,您可以處理propertychange事件。

Demo(在所有瀏覽器)

+0

神奇,正是我所期待的! :) – 2011-03-31 02:39:01

+0

如果從文檔外部拖入文本,使用Ctrl + x(剪切)或從上下文菜單剪切,則在Opera中不起作用。 – RobG 2011-03-31 04:29:51

0

有可能this SO question (and related jsfiddle)可能會回答你的問題。

(在鏈接的jsfiddle,在機頂盒將文本測試)

換句話說,結合mouseupmousedown

+0

我試過這個,沒有成功;在那個jsfiddle中,如果你嘗試在上下文菜單中使用Delete選項,你會看到沒有事件觸發。當我開始在輸入框中拖動我的選擇時它會作出反應,但當我放下它併發生實際更改時,它不會觸發任何事情。感謝雖然:) – 2011-03-31 02:42:07

0

如果你不能找到涵蓋所有情況的事件的組合,你可能需要使用setInterval(function() {... }, period)。你可以玩period,看看它的效果如何。

+0

幸運的是,這沒有必要。 – SLaks 2011-03-31 02:42:08

相關問題