25

如何处理通过在 javascript 中单击右键选择的粘贴?我尝试使用“onpaste”事件和所有其他可用的 html 事件,但没有任何效果。

4

4 回答 4

31

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和其他事件(changepropertychangedragdrop等)结合使用,以创建相对防弹的内容更改跟踪。


脚注:

1 Opera 支持从Presto/2.10.286开始的剪贴板 API ,对应于 12.10,如此建议。Opera 的闪烁版本(从 15 开始)也应该支持它,但我无法测试它,因为仍然没有 Linux 版本。

于 2012-05-31T12:52:08.790 回答
2

默认情况下,该事件不公开为“onpaste”IIRC。你可以很简单地在 jQuery 中通过发出

jQuery(document).bind('paste', function(e){ alert('paste event caught') });
于 2012-05-31T12:45:28.373 回答
1

我很惊讶问题 #4532473 没有回答如果你想捕获 afterpaste 事件会发生什么。由于这可能是一半情况下的问题,Firefox(已测试)中的一种可能方法是在 onpaste 处理程序中注册一个 oninput 事件,并在执行完成后立即删除 oninput 处理程序。

在 ie 中,应该使用 onpropertychange 而不是 oninput。(未测试)

于 2012-07-03T07:29:03.393 回答
1

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>
于 2014-05-24T23:28:32.327 回答