2013-02-20 69 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); 
    }); 
}); 

希望,这将工作在你的情况。 :)