前天項目有一個需求,在Excel文檔里面直接復制商品編碼,然后粘貼到頁面空白處就把相應的數據加載出來。當時我是懵逼的,不知道如何下手。
以前沒遇到過類似的需求,后來才想起onpaste事件
在使用onpaste事件時遇到了2個問題:
第1個問題:jquery綁定onpaste事件以后,如何能獲取到粘貼之后的值?
解決方法:使用如下代碼即可,原文出處
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> I have a textarea, on paste to that textarea I want to <textarea id="content" cols="50" rows="5"></textarea> </body> <script src="js/jquery-1.11.3.js"></script> <script> jQuery(function($) { $('#content').bind('paste', function(e) { var pastedText = undefined; if(window.clipboardData && window.clipboardData.getData) { // IE pastedText = window.clipboardData.getData('Text'); } else { pastedText = e.originalEvent.clipboardData.getData('Text'); //e.clipboardData.getData('text/plain'); } alert(pastedText); }); }); </script> </html>
第2個問題:在下圖空白處按ctrl+v以后右下角會提示要先輸入客戶名稱,但是要按2次ctrl+v,右下角的彈框才出來;
而且只有第一次需要按2次,如果刷新頁面或者按第3次ctrl+v以后就可以直接彈出來了,如下圖:
解決方法: 在經過多次測試之后,我發現是綁定事件的問題,這里不應該用bind,或者on,應該用live
(這里使用on的話也可以解決這個問題,但是會出現另一個問題,所以沒用)
很多文章建議停止使用.live()方法,因為它已經被棄用了,並存在一些問題,
目前我也不知道是什么原因導致這個問題,我只有使用這個方法才能解決這個問題)
注:詳解jQuery中 .bind() -.live() - .delegate() - .on() 的區別
詳解jQuery中 .bind() -.live() - .delegate() - .on() 的區別