jquery拦截粘贴事件

时间:2012-12-20 02:54:46

标签: jquery

我已经从输入中绑定了粘贴事件:

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

每次我点击CTRL-V,它都会返回e事件对象。

我想获取用户即将粘贴在输入中的数据。

通过检查事件对象,我在以下几个地方找到了值:

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

但是那些在粘贴发生后返回输入中的值。所以如果我在输入另一个字符串后粘贴一些文本,我会将两个字符串连接起来。

我搜索互联网,发现丑陋的闪存解决方案。

在jquery中有一个干净的方法吗?

我想在获取输入值e.srcElement.value之后用before获取整个文本,然后比较两个字符串并消除第一部分,通过连续性返回剪贴板的值。

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:2)

clipboardData适用于现代浏览器(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

答案 2 :(得分:-1)

您可以使用onbeforepaste事件来执行此操作。

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