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,说明了这一点:
适用于Firefox,Chrome和Internet Explorer。