Вопрос по javascript – Вставить событие в Javascript

24

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

Вы пробовали предлагаемые решения? Dmitry Pashkevich

Ваш Ответ

4   ответа
1

Хорошее чистое решение 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>
30

Событие onpaste должно работать во всех современных браузерах (UPD Включая Opera & gt; = 12,101).

Свяжите это в 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 поддерживает Clipboard API, начиная сPresto / 2.10.286 что соответствует 12.10, как предложеноВот. Blink версии Opera (начиная с 15) также должна поддерживать его, но я не могу его протестировать, поскольку версии для Linux до сих пор нет.

1

Я был удивлен, что вопрос # 4532473 был закрыт без ответа о том, что произойдет, если вы захотите запечатлеть событие с послевкусием. Поскольку это, вероятно, является проблемой в половине случаев, возможный подход в Firefox (протестирован) заключается в регистрации события oninput непосредственно внутри обработчика onpaste и удалении обработчика oninput, как только он завершит выполнение.

Т.е. вместо oninput следует использовать onpropertychange. (не испытано)

Для тех, кто заинтересован, простая реализацияafterpaste
2

Событие по умолчанию не отображается как "onpaste". IIRC. Вы можете сделать это довольно просто в jQuery, выполнив

jQuery(document).bind('paste', function(e){ alert('paste event caught') });
Событие вставки фиксируется, но содержимое не может быть прочитано таким образом, как & quot; document.addEventListener & quot; Можно.

Похожие вопросы