使用JQuery捕获粘贴到textarea中的文本

时间:2010-02-11 05:16:37

标签: jquery javascript-events copy-paste

我必须使用JQuery来获取文本区域的粘贴事件。我尝试了以下代码,但它无法正常工作......

$(document).ready(function()
{ 
  $('#txtcomplaint').keyup(function()
  {  
     TextCounter('txtcomplaint','counterComplaint', 1000 ); 
  }) 
  $('#txtcomplaint').onpaste(function()
  {  
     alert()
     //TextCounter('txtcomplaint','counterComplaint', 1000 ); 
  }) 
});

4 个答案:

答案 0 :(得分:25)

你可以做这样的事情

$("#txtcomplaint").bind('paste', function(e) {
    var elem = $(this);

    setTimeout(function() {
        // gets the copied text after a specified time (100 milliseconds)
        var text = elem.val(); 
    }, 100);
});

答案 1 :(得分:6)

$('#txtcomplaint').bind('paste', function(e){ alert('pasting!') });

有关其他资源,请查看here

答案 2 :(得分:1)

我终于让它工作了1)输入,2)拖放,3)Ctrl-V和4)从鼠标点击的上下文菜单粘贴,但我必须将粘贴和拖放处理程序附加到document(其中'taValue'是我试图监控的textareas类):

        $(document).on("paste drop", '.taValue', function (e) {
          myHandler.call(e.target, e);
        });

textarea上的keyup事件已经奏效。接下来的问题是,在textarea中的文本实际发生更改之前,粘贴和放置事件会被触发。在我的情况下,我想将新文本与原始文本进行比较。我求助于一个setTimeout:

    function myHandler(e) {
      if (e && (e.type === "drop" || e.type === "paste")) {
        var me = this;
        setTimeout(function () { myHandler.call(me) }, 200);
      }... [more code to do the comparison]

我讨厌对这样的事情使用超时但它确实有效(当我尝试100毫秒间隔时,它没有)。

答案 3 :(得分:1)

这是最有用的解决方案:

$("#item_name").bind("input change", function() {});

也许改变不是必要的。