Есть ли способ обнаружить щелчок правой кнопкой мыши с последующей вставкой с помощью JavaScript в IE и Firefox?
Обновлять:
Я решил использовать для этого JQuery:
$('#controlId').bind('paste', null, function() {
// code
});
Это не совсем то, что я искал (потому что он запускается на 'ctrl + v', а также на 'щелчок правой кнопкой мыши + вставка', но я могу обойти это.
Протестировал его в Chrome, Firefox 3, IE 7 и IE 6, и он работает.
Я в замешательстве. Вы имеете в виду «определить щелчок правой кнопкой мыши с последующей вставкой» или «определить щелчок правой кнопкой мыши, а затем выполнить вставку»?
Извини за это. Я изменил заголовок и добавил больше текста, чтобы его было легче понять.
@Guido García: я использую расширитель автозаполнения набора инструментов управления ajax, проблема в том, что он не заполняется автоматически, когда вы вставляете текст с помощью мыши в IE (работает в Firefox, а использование ctrl + v работает в обоих), поэтому я пытается поймать событие, чтобы запустить автозаполнение. Имеет ли это смысл?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


С IE у вас есть паста
С помощью Mozilla вы можете изучить на входе а также
elementReference.addEventListener("DOMCharacterDataModified", function(e){ foo(e);}, false);
Нет простого решения.
Эрик
Не могли бы вы предоставить полный пример для IE и Firefox? Спасибо. А как насчет Chrome и Safari?
Дешевый прием (который работает), который вы можете попробовать, это:
В IE8 я заметил, что если щелкнуть правой кнопкой мыши в текстовом поле и затем выбрать «вставить», событие «mouseleave» задерживается до завершения вставки. Так что он стабильно срабатывает сразу после пасты! :) Работает для меня и на самом деле отлично выручил меня.
Это только для приложения интрасети, я не тестировал в Firefox и т. д.
Ваше здоровье
$('#controlId').bind('paste', null, function(e) {
if (!e.keyCode){
/*
since no key was down at the time of the event we can assume it was
from the toolbar or right click menu, and not a ctrl+v
*/
}
});
Quirksmode говорит, что это довольно надежное решение: quirksmode.org/dom/events/cutcopypaste.html
Мне нравится это решение:
$('#txt_field').bind('input propertychange', function() {
console.info($(this).val());
});
Потрясающие! Как вы вообще это догадались?
Просто чтобы люди знали, это работает как при вырезании, так и при вставке.
Это отличное решение
Мне было любопытно, какая привязка что делает, но в итоге мне понадобился только «ввод», чтобы улавливать события ввода с клавиатуры, вставки с клавиатуры и вставки мыши.
Используйте setTimeout(), установите небольшой тайм-аут, пока функция .val () не будет заполнена.
$(document).on('paste blur keyup', '#controlId', function(event) {
var element = $(event.target);
setTimeout(function() {
var text = $(element).val();
// do something with text
}, 100);
});
Источник: Поймать ввод пасты
У меня была такая же проблема в IE8. Chrome позволял мне распознать вставку при нажатии правой кнопки мыши, но IE8 - нет.
Мне удалось исправить проблему с JQUERY, используя функцию отпускания мыши, как описано Аароном, но вот код:
for IE8:
$( "#field" ).mouseleave(function() {
doStuff());
});
for Chrome:
$('#field').bind('input',function() {
doStuff();
});
Я сделал следующее, которое срабатывает только при наведении курсора мыши:
onmouseup = "jQuery(this).on('paste',function(event){setTimeout(function(){alert('Paste detected!');},100);});"
если вы используете vue, вы можете выдать и передать вставленное значение следующим образом:
<v-text-field
@input = "$emit('rightclickpaste',$event)"
>
</v-text-field>
Я боюсь. Что ты пытаешься сделать ? Я думаю, что в зависимости от щелчка правой кнопкой мыши и вставки возникают серьезные проблемы с удобством использования в Интернете.