jQuery检测页面上的任何位置粘贴事件并将其“重定向”到Textarea

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

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

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

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

这在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); } }); 

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

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

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

在所有浏览器中,一般情况下你不能直接访问剪贴板(可以使用flash设置,或者我认为在某些版本的Internet Explorer中它可能是可能的)。

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

然后你可以集中输入/ textarea,不要取消事件的传播,并且firefox会愉快地将文本粘贴到你想要的位置。

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

HTML:

  

JS:

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

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

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

适用于Firefox,Chrome和Internet Explorer。