Как я могу обработать вставку, щелкнув правой кнопкой мыши в javascript? Я попытался использовать событие "onpaste" и все другие доступные html-события, но ничего не работает.
Вставить событие в Javascript
Ответ 1
Событие 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 и другими событиями (change, propertychange, dragdrop и т.д.) для создания относительно пуленепробиваемого отслеживания изменение содержимого.
Сноска:
1 Opera поддерживает API буфера обмена, начиная с Presto/2.10.286, что соответствует 12.10, как предложено . Blink версии Opera (начиная с 15) также должны поддерживать его, но я не могу его протестировать, так как до сих пор нет версии Linux.
Ответ 2
Событие не отображается по умолчанию как "onpaste" IIRC. Вы можете сделать это просто в jQuery, выпуская
jQuery(document).bind('paste', function(e){ alert('paste event caught') });
Ответ 3
Я был удивлен вопросом # 4532473 был закрыт без ответа о том, что произойдет, если вы хотите захватить событие afterpaste. Поскольку это, вероятно, проблема в половине случаев, возможный подход в firefox (тестируется) заключается в регистрации события oninput прямо внутри обработчика onpaste и удаления обработчика oninput, как только он будет выполнен.
В этом случае вместо oninput следует использовать onpropertychange. (не проверено)
Ответ 4
Хорошее чистое решение JS (по запросу...) доступно на сайте разработчика Mozilla
<!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>