如何处理通过在 javascript 中单击右键选择的粘贴?我尝试使用“onpaste”事件和所有其他可用的 html 事件,但没有任何效果。
4 回答
onpaste 事件应该适用于所有现代浏览器(包括 Opera >= 12.10 1的UPD)。
像这样在jQuery中绑定它:
$('#txt').on('paste', function() {console.log('text pasted!')})
这是一个活生生的例子:http: //jsfiddle.net/7N6Xq/
在纯 JavaScript 中,现代浏览器看起来像这样
elem.addEventListener ("paste", handler, false); // all browsers and IE9+
对于旧的 IE 版本:
elem.attachEvent ("onpaste", handler); // IE<9
您还可以将其与oninput和其他事件(change、propertychange、dragdrop等)结合使用,以创建相对防弹的内容更改跟踪。
脚注:
1 Opera 支持从Presto/2.10.286开始的剪贴板 API ,对应于 12.10,如此处建议。Opera 的闪烁版本(从 15 开始)也应该支持它,但我无法测试它,因为仍然没有 Linux 版本。
默认情况下,该事件不公开为“onpaste”IIRC。你可以很简单地在 jQuery 中通过发出
jQuery(document).bind('paste', function(e){ alert('paste event caught') });
我很惊讶问题 #4532473 没有回答如果你想捕获 afterpaste 事件会发生什么。由于这可能是一半情况下的问题,Firefox(已测试)中的一种可能方法是在 onpaste 处理程序中注册一个 oninput 事件,并在执行完成后立即删除 oninput 处理程序。
在 ie 中,应该使用 onpropertychange 而不是 oninput。(未测试)
Mozilla 开发网站上提供了不错的纯 JS 解决方案(根据要求...)
<!DOCTYPE html>
<html>
<head>
<title>onpaste event example</title>
</head>
<body>
<h1>Play with this editor!</h1>
<textarea id="editor" rows="3" cols="80">
Try pasting text into this area!
</textarea>
<script>
function log(txt) {
document.getElementById("log").appendChild(document.createTextNode(txt + "\n"));
}
function pasteIntercept(evt) {
log("Pasting!");
}
document.getElementById("editor").addEventListener("paste", pasteIntercept, false);
</script>
<h2>Log</h2>
<textarea rows="15" cols="80" id="log" readonly="true"></textarea>
</body>
</html>