2012-02-29 23 views
24

我有一點點輕鬆沒收粘貼的文本到我的輸入:jQuery的如何獲得粘貼的內容

<input type="text" id="myid" val="default"> 
$('#myid').on('paste',function(){ 
     console.log($('#myid').val()); 
}); 

的console.log顯示:

default 

如何catch粘貼的文本,並得到可以使用?

+1

已經有一個解決方案[jQuery的抓糊輸入] [1],但在我看來,不是很好的一個 [1]:HTTP ://stackoverflow.com/questions/686995/jquery-catch-paste-input – kingpin 2012-02-29 06:08:12

+0

爲什麼這是作爲評論? – kingpin 2012-02-29 06:13:01

回答

31

現代瀏覽器現在支持input事件,內容已被粘貼

$('#myid').on('input', function() { 
    console.log($('#myid').val()); 
}); 

之後,將觸發當粘貼到輸入值有時間更新之前paste事件。
一個解決這個辦法就是推遲值取直到輸入有時間更新:

$('#myid').on('paste', function() { 
    setTimeout(function() { 
     console.log($('#myid').val()); 
    }, 100); 
}); 

還有直接從剪貼板而不是從輸入值獲取數據的可能性,通過訪問event.clipboardData,但是這種技術是實驗性的,在所有瀏覽器中都不支持,並且在我看來比使用input事件更簡單,甚至是簡單的超時。

+1

你爲什麼超時100毫秒,而不是0? – user2867288 2016-09-26 19:29:32

+3

@ user2867288 - 4年後,我不知道爲什麼,我只是做了? – adeneo 2016-09-26 20:03:53

+0

只是想知道是不是因爲它在某些瀏覽器中無法正常工作,否則(IE),因爲理想情況下大多數人不想在其Web應用程序中添加不必要的延遲。 – user2867288 2016-09-27 13:49:18

-3

試試這個或增加超時太:

$('#myid').on('paste',function(){ 
      console.log(this.value); 
    }); 
41

接受的答案居然是哈克又醜,似乎是經常建議計算器上的粘貼事件。我認爲更好的方式來做到這一點是this

$('#someInput').bind('paste', function(e) { 
    var data = e.originalEvent.clipboardData.getData('Text'); 
    //IE9 Equivalent ==> window.clipboardData.getData("Text"); 
}); 
+4

這不適用於IE 9,但'setTimeout'方法。 – BateTech 2014-05-01 15:09:54

+3

window.clipboardData.getData(「Text」)< - 與上面相同的IE9。 – 2015-03-23 16:50:50

+0

@toddv,不錯。 – cateyes 2015-03-28 22:51:46