jQuery绑定到Paste Event,如何获取粘贴的内容

AnA*_*ice 67 javascript jquery copy-paste paste

我有一个jquery令牌tagit插件,我想绑定到粘贴事件以正确添加项目.

我能够像这样绑定到粘贴事件:

    .bind("paste", paste_input)
Run Code Online (Sandbox Code Playgroud)

...

function paste_input(e) {
    console.log(e)
    return false;
}
Run Code Online (Sandbox Code Playgroud)

如何获取实际粘贴的内容值?

jef*_*eff 124

有一个onpaste活动适用于现代浏览器.您可以使用对象getData上的函数访问粘贴的数据clipboardData.

$("#textareaid").bind("paste", function(e){
    // access the clipboard using the api
    var pastedData = e.originalEvent.clipboardData.getData('text');
    alert(pastedData);
} );
Run Code Online (Sandbox Code Playgroud)

请注意,从jQuery 3开始,不推荐使用bindunbind.首选调用是on.

所有现代浏览器都支持Clipboard API.

另请参阅:在Jquery中如何处理粘贴?

  • 这段代码会在`var pastedData =`行上出错:`Uncaught TypeError:无法读取undefined`的属性'getData'.您需要将`e.clipboardData`更改为`e.originalEvent.clipboardData`.我怀疑是因为jquery在它自己的事件中包装了实际的粘贴事件 - 尽管如此,请不要引用我的话. (7认同)
  • 如果你需要它,IE的解决方案:`window.clipboardData.getData('text')` (3认同)
  • `e.originalEvent.clipboardData.getData('text/plain')` 为我工作 (2认同)

Tat*_*nit 17

怎么样:http://jsfiddle.net/5bNx4/

.on如果您使用的是jq1.7等,请使用.

行为:当您paste在第一个textarea上键入任何内容或任何内容时,下面的teaxtarea会捕获cahnge.

休息我希望它有助于事业. :)

有用的链接=>

你如何在jQuery中处理oncut,oncopy和onpaste?

抓住粘贴输入

$(document).ready(function() {
    var $editor    = $('#editor');
    var $clipboard = $('<textarea />').insertAfter($editor);

    if(!document.execCommand('StyleWithCSS', false, false)) {
        document.execCommand('UseCSS', false, true);
    }

    $editor.on('paste, keydown', function() {
        var $self = $(this);            
        setTimeout(function(){ 
            var $content = $self.html();             
            $clipboard.val($content);
        },100);
     });
});
Run Code Online (Sandbox Code Playgroud)

  • 它不满足上下文菜单粘贴(右键单击+粘贴)的要求,对此有什么想法吗? (2认同)

Kev*_*vin 7

我最近需要完成类似的事情.我使用以下设计来访问粘贴元素和值.jsFiddle演示

$('body').on('paste', 'input, textarea', function (e)
{
    setTimeout(function ()
    {
        //currentTarget added in jQuery 1.3
        alert($(e.currentTarget).val());
        //do stuff
    },0);
});
Run Code Online (Sandbox Code Playgroud)


Yar*_*rin 6

在现代浏览器上,这很简单:只需使用输入事件和inputType属性:

$(document).on('input', 'input, textarea', function(e){
  if (e.originalEvent.inputType == 'insertFromPaste') {
    alert($(this).val());
  }
});
Run Code Online (Sandbox Code Playgroud)

https://codepen.io/anon/pen/jJOWxg


Sha*_*ani 5

另一种方法:该input事件也将捕获该paste事件。

$('textarea').bind('input', function () {
    setTimeout(function () { 
        console.log('input event handled including paste event');
    }, 0);
});
Run Code Online (Sandbox Code Playgroud)