在Javascript中粘贴事件

时间:2012-05-31 12:40:58

标签: javascript javascript-events

如何通过右键单击javascript来处理选中的粘贴? 我试过" onpaste"事件和所有其他html事件可用,但没有任何作用。

4 个答案:

答案 0 :(得分:31)

onpaste事件应该适用于所有现代浏览器( UPD 包括Opera> = 12.10 1 )。

将它绑定在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 和其他事件(更改 propertychange dragdrop 等)以创建相对无懈可击的内容更改跟踪。


脚注:

1 Opera支持从Presto/2.10.286开始的Clipboard API,对应于建议here的12.10。 Opera的Blink versions(从15开始)也应该支持它,但我无法测试它,因为仍然没有Linux版本。

答案 1 :(得分:2)

默认情况下,该事件不会被曝光为“onpaste”IIRC。你可以通过发布

在jQuery中完成它
jQuery(document).bind('paste', function(e){ alert('paste event caught') });

答案 2 :(得分:1)

我很惊讶问题#4532473如果您想要捕捉后续活动,会发生什么事情。因为这可能是问题的一半,在firefox(测试)中可能的方法是在onpaste处理程序内注册oninput事件,并在执行完后立即删除oninput处理程序。

即使用onpropertychange而不是oninput。 (未经测试)

答案 3 :(得分:1)

很好的纯JS解决方案(根据要求......)可用on the Mozilla dev site

<!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>