为什么在pre-paste中将事件粘贴到jquery会触发?

我试图使文本框类似于Twitter ,因为我已经编写了代码

  • 字数
  • 使用的事件更改,密钥和粘贴

Keyup和Change事件运行正常,但粘贴事件有点奇怪,当我在textarea中粘贴一些东西时,字数不会在那一刻发生变化,经过一些调试后我发现粘贴事件在粘贴文本框上的东西之前会激活 。 我不知道他们是如何在Twitter上处理的。 这是我的代码:事件:

'click #textboxId' : 'submitQuestion' 'keyup #textboxId' : 'wordCounter' 'change #textboxId' : 'wordCounter' 'paste #textboxId' : 'wordCounter' wordCounter: -> #Code for Word Count# 

由于粘贴事件的预粘贴性质,该实例上的工作计数不会发生变化。
您的建议和帮助将不胜感激,感谢您的时间。

看这个例子。

http://jsfiddle.net/urEhK/1

 $('textarea').bind('input propertychange', function() { $('#output').html($(this).val().length + ' characters'); }); 

这种行为非常奇怪。 你会认为其中一个事件会正确地捕捉到这个吗? 我很惊讶没有更多的答案通过谷歌。

  function update() { alert($textbox.val().length); } var $textbox = $('input'); $textbox.bind('keyup change cut paste', function(){ update(); //code to count or do something else }); // And this line is to catch the browser paste event $textbox.bind('input paste',function(e){ setTimeout( update, 250); }); 

您现在应该使用on()而不是bind()来查看此post 。 创建命名函数也是不必要的,您只需创建一个匿名函数即可。

 $('#pasteElement').on('paste', function() { setTimeout(function(){ alert($('#pasteElement').val()); }, 100); }); 

你可以做一件事,首先获得原始数据。 然后您可以获取事件粘贴数据并添加它们。

  $("#id").on("paste keypress ",function(event){ // eg. you want to get last lenght var length=$("#id").val().length; if(event.type == "paste"){ //then you can get paste event data.= length+=event.originalEvent.clipboardData.getData('text').length; } });`