Подтвердить что ты не робот

Вставить событие в Javascript

Как я могу обработать вставку, щелкнув правой кнопкой мыши в javascript? Я попытался использовать событие "onpaste" и все другие доступные html-события, но ничего не работает.

4b9b3361

Ответ 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>