jQuery检测页面上的任何地方粘贴事件和"重定向"它到Textarea

时间:2013-01-03 00:54:38

标签: jquery paste

我希望创建一个“轻松粘贴体验”,用户可以在页面的任何位置按ctrl-v将其剪贴板数据粘贴到textarea中。我希望他们能够将文本粘贴到textarea中,而不会将textarea聚焦。

我知道我可以使用此代码来检测粘贴事件:

$('html').bind('paste', function(e) {

});

但我不知道如何抓取剪贴板数据并将其“移动”到textarea,或者甚至可能(访问用户剪贴板的限制)。

3 个答案:

答案 0 :(得分:3)

在Firefox中无法实现。在IE,Safari和Chrome中,您可以执行以下操作:

$('html').bind('paste', function(e) {
    e.preventDefault();
    if(e.originalEvent.clipboardData){
       var text = e.originalEvent.clipboardData.getData("text/plain");
       alert(text);
     }
});

答案 1 :(得分:0)

无法从JavaScript(或Flash)访问复制缓冲区,但有一个名为ZeroClipboard的Flash项目可以将文本添加到无法读回的复制缓冲区中。 / p>

答案 2 :(得分:0)

可以在firefox中执行您正在尝试的操作,捕获Ctrl-V并将其重定向到textarea / text输入。

然而,由于其他海报所说,由于安全性而在firefox中监听onpaste事件,你无法做到这一点,但是可以通过监听keydown事件并捕获Ctrl + V来实现。

在所有浏览器中,一般情况下您无法直接访问剪贴板(可以使用闪存进行设置,或者我认为在某些版本的Internet Explorer中可能已经可以使用闪存)。

您可以在窗口上侦听keydown事件,并检查是否按下Ctrl + V.

然后你可以集中输入/ textarea,不要取消事件的传播,firefox会乐意将文本粘贴到你想去的地方。

然后,您可以收听输入的onpaste或onchange事件以进一步处理文本。

HTML:

<textarea id='redirect_ta'></textarea>

JS:

$(window).keydown(function(event) {
    if(event.ctrlKey && event.keyCode == 0x56) {
        $('#redirect_ta').focus();
    }
});

这是一个JSFiddle,说明了这一点:

http://jsfiddle.net/DK536/2/

适用于Firefox,Chrome和Internet Explorer。