2012-12-20 109 views
9

在我從一個輸入綁定paste事件:jQuery的攔截粘貼事件

$(document).ready(function(){ 
     $('.myInput').bind("paste",function(e) { 
      console.log(e); 
     }); 
});​ 

每次我按CTRL-V則返回e事件對象。

我想獲取用戶即將粘貼到輸入中的數據。

通過檢查事件對象,我發現的價值在幾個地方,如:

  • e.srcElement.value
  • e.target.value

但是比不上那些在輸入返回值粘貼後發生。所以如果我在輸入另一個字符串後粘貼一些文本,我會將這兩個字符串連接起來。

我搜索trought的互聯網,發現什麼,但醜陋的閃存解決方案。

有沒有一種乾淨的方式來做到這一點在jQuery中?

我想在得到輸入值before粘貼後得到全部文字e.srcElement.value,然後比較兩個字符串並消除第一部分,通過連續返回剪貼板的值。

+0

你的意思是你只是想插入複製的文本之前清除輸入? – PhearOfRayne

+0

@StevenFarley我想獲取用戶剛剛粘貼到輸入的字符串 – jviotti

回答

6

也許這就是你要做的,不是100%肯定:

HTML:

<input type="text" id="test" class="myInput" value="This is some default text" />​ 

的jQuery:

$(document).ready(function() { 
    $('input').on('paste', function (e) { //Attach paste event handler for all inputs 
     $(this).val('').val(e.target.value); //Clear the current value, then insert the value of the data that was pasted 
    }); 
}); 

小提琴:http://jsfiddle.net/PMq6U/

+0

你能解釋這段代碼嗎? –

+1

差不多:)我仍然需要將粘貼的值作爲事件中的變量。我試過這個:http://jsfiddle.net/jviotti/PMq6U/3/警報應該返回新的值。相反,它不返回任何內容,就像它在val()之前調用一樣。 – jviotti

+0

@RicardoLohmann它設置的值爲空白,然後將其設置爲粘貼值。 – jviotti

-1

你可以使用onbeforepaste事件來做到這一點。

$(function(){ 
    $('#el').on('beforepaste',function(e){ 
     [...] 
    }); 
}); 
+1

它沒有被觸發:http://jsfiddle.net/jviotti/9UsYC/7/ – jviotti

+0

您使用的瀏覽器是什麼?它在Chrome中正常工作。 – Licson

+0

文檔?我無法在任何地方找到該事件。它是瀏覽器特定的? – nickaknudson

2

剪貼板數據適用於現代瀏覽器(IE11 +,Firefox,Chrome ...)。

$(document).ready(function(){ 
     $('.myInput').on('paste', function (e) { 
      var dt = e.originalEvent.clipboardData; 
      if(dt && dt.items && dt.items[0]){ 
       dt.items[0].getAsString(function(text){ 
        console.log(text); //the pasted content 
       }); 
      }else if(dt && 'getData' in dt){ 
       console.log(dt.getData('text')); //the pasted content 
      } 
     }); 
}); 

http://jsfiddle.net/6n10y0ds/9/

https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer

+0

似乎不適用於Firefox 46.x. –

+0

我更新了Firefox的代碼 – cuixiping