2010-02-11 70 views
13

我必須使用JQuery來獲取文本區域的粘貼事件。我曾嘗試下面的代碼,但它是不工作...使用JQuery捕獲粘貼到textarea中的文本

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

回答

21

你可以做這樣的事情

$("#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); 
}); 
+0

如果您按Ctrl + V進行粘貼,則此方法可用。但如果您右鍵單擊鼠標並選擇「粘貼」,則不起作用。 – JohnnyLinTW 2013-06-26 06:33:01

+6

我發現如果改爲$(「#txtcomplaint」)。bind('paste',null,function(e)...並且它對Ctrl + V和鼠標粘貼工作正常。 – JohnnyLinTW 2013-06-26 08:01:16

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

有關其他資源看一看here

+0

您將不會使用此方法獲取複製的文本。 – rahul 2010-02-11 05:29:37

+0

@rahul:他只想用這個事件來計算海豚的文字。 – 2010-02-11 05:33:50

1

我終於拿到了這1)輸入,2)拖放,3)按Ctrl-V工作,4)從鼠標的右鍵菜單粘貼點擊,但我不得不附上膏體拖放處理程序文件(其中「taValue」是類我試圖監視文字區域的):

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

上textarea的KeyUp事件已經奏效。接下來的問題是paste和drop事件在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] 

我討厭使用超時這樣的事情,但它的工作(當我試圖100ms的時間間隔,它沒有)。

0

這是最有用的解決方案:

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

也許改變不是必需的。