2013-02-20 33 views
3

我需要檢查所有會改變我的文本輸入內容的事件。到目前爲止,我有處理鍵盤,剪切和粘貼。但內容也可以通過突出顯示文本並單擊刪除或撤消來更改。有沒有辦法聽取這些事件?輸入刪除/撤銷的事件處理程序

$('#input').on('paste cut keyup ',function() { 
    //add delete and undo to listner 
});  

回答

3

你有比這更多的問題,你也不必擔心與瀏覽器自動填充功能等。由於這個原因,HTML5包含了現代瀏覽器中包含的input事件。

捕捉每一個可能的變化事件(*),瀏覽器會你捕捉的方法見this answer,不費一槍超過每變化一次。

(*)看起來他們忘了cut,所以也加入了。

+0

謝謝你('DOMAttrModified textInput input change keypress paste focus',function(){// handle});我在這裏找到了答案: – user2014429 2013-02-20 22:34:48

0

使用更改事件。

$('#input').on('change', function(){});

+0

變化一般只會失去焦點。 – Plynx 2013-02-20 22:21:10

0

你至少缺少的按鍵和變化。我不知道「變化」是否適用於這些行爲,我知道當輸入元素失去焦點時,變化通常只是被調用。

1

我建議使用​​和inputhttp://jsfiddle.net/vKRDR/

var timer; 
$("#input").on("keydown input", function(){ 
    var self = this; 
    clearTimeout(timer) 
    // prevent event from happening twice 
    timer = setTimeout(function(){ 
     console.log(self.value); 
    },0); 
}); 

KEYUP不會趕上特殊鍵,如Ctrl和輸入會抓住的東西,如粘貼刪除等,甚至從上下文菜單中。

通過使用keydown和輸入,事件立即發生,而不是等待用戶釋放按鈕或模糊輸入。

的keydown完成大部分工作,投入拿起其中的keydown不能處理它,如上下文菜單中刪除/粘貼/剪切

+0

謝謝你的jsfiddle – user2014429 2013-02-20 22:38:14

+0

請注意,經過進一步測試...你應該能夠擺脫只是使用輸入,但我不知道如何向後兼容它是與IE – 2013-02-20 22:40:57

+0

iOS失敗這種方式;) – yckart 2013-02-20 23:08:17

1

利用這些,他們會得到所有的變化:

$(container).bind('keyup input propertychange paste change'), function (e){}); 

也,你可以做一兩件事來檢查這個onchange事件裏面的值:

$(function(){ 
    $('input').on('keyup input propertychange paste change', function(){ 
     if ($(this).data('val')!=this.value) { 
      alert('Something has been changed in the input.'); 
     } 
     $(this).data('val', this.value); 
    }); 
}); 

希望,這將工作在你的情況。 :)