<!DOCTYPE html>
<html>
<head>
<title>Clipboard Paste Text</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
</head>
<body>
<input type="text" placeholder="paste in here" />
<script type="text/javascript">
/* <![CDATA[ */
$(document, 'input[type="text"]').on('paste', function(event) {
var oEvent = event.originalEvent;
oEvent.preventDefault();
var clipText = '';
if(window.clipboardData){
clipText = window.clipboardData.getData('Text');
}else if(typeof oEvent == 'object' && oEvent.clipboardData){
clipText = oEvent.clipboardData.getData('text/plain');
}
// console.log('Pasted ' + clipText.length + ' characters.');
alert('Pasted ' + clipText.length + ' characters.');
});
/* ]]> */
</script>
</body>
</html>
^我有这个演示代码。它绑定paste event
onINPUT[TEXT]
和DOCUMENT
.
- 在Google Chrome(和Opera 15+)中,捕获
Ctrl+V
了没有插入符号(外部输入和文本区域)的 a。 - 在IE 和Firefox中,不会捕获
Ctrl+V
外部可粘贴对象(输入和文本区域) 。(但绑定所有和
的文档粘贴事件捕获。)paste event
inputs
textareas
这是正确的行为吗?我的JS正确吗?
我想在所有三个浏览器中捕获没有输入文本框的 Ctrl+V。我现在正在使用文本输入,但我想完全删除它并在文档级别捕获事件,而不是在输入框级别。可以做到吗?
PS:如果粘贴在文本区域中,我需要粘贴大量占用浏览器的文本。我hidden field
通过捕获a 将其存储在paste event
a 中inputbox
。我当前的解决方案工作正常,但我仍然想知道我是否遗漏了什么或 FF 和 IE 只会paste events
在输入/文本区域级别触发。
PPS:我已经使用spellcheck=false
andautocomplete=off
技巧来允许粘贴更多文本......但它仍然会挂起一段时间,而且我不需要它可编辑,这是一个更好的解决方案。
PPS:我的 JS 技能相当生疏(它们更像是一种 JS 生存模式),我不担心浏览器的向后兼容性,因为那些会经常使用此更新的人。
做了一个jsfiddle:http: //jsfiddle.net/ninty9notout/A42UN/