Как определить щелчок правой кнопкой мыши + вставку с помощью JavaScript?

Есть ли способ обнаружить щелчок правой кнопкой мыши с последующей вставкой с помощью JavaScript в IE и Firefox?

Обновлять:

Я решил использовать для этого JQuery:

$('#controlId').bind('paste', null, function() {
    // code
});

Это не совсем то, что я искал (потому что он запускается на 'ctrl + v', а также на 'щелчок правой кнопкой мыши + вставка', но я могу обойти это.

Протестировал его в Chrome, Firefox 3, IE 7 и IE 6, и он работает.

Я боюсь. Что ты пытаешься сделать ? Я думаю, что в зависимости от щелчка правой кнопкой мыши и вставки возникают серьезные проблемы с удобством использования в Интернете.

Guido 14.01.2009 11:38

Я в замешательстве. Вы имеете в виду «определить щелчок правой кнопкой мыши с последующей вставкой» или «определить щелчок правой кнопкой мыши, а затем выполнить вставку»?

Sietse 14.01.2009 11:41

Извини за это. Я изменил заголовок и добавил больше текста, чтобы его было легче понять.

Rismo 14.01.2009 23:11

@Guido García: я использую расширитель автозаполнения набора инструментов управления ajax, проблема в том, что он не заполняется автоматически, когда вы вставляете текст с помощью мыши в IE (работает в Firefox, а использование ctrl + v работает в обоих), поэтому я пытается поймать событие, чтобы запустить автозаполнение. Имеет ли это смысл?

Rismo 14.01.2009 23:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
46
4
45 897
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

С IE у вас есть паста

С помощью Mozilla вы можете изучить на входе а также

elementReference.addEventListener("DOMCharacterDataModified", function(e){ foo(e);}, false);

Нет простого решения.

Эрик

Не могли бы вы предоставить полный пример для IE и Firefox? Спасибо. А как насчет Chrome и Safari?

thedp 23.12.2009 15:48

Дешевый прием (который работает), который вы можете попробовать, это:

  • Функция mouseleave в jQuery.

В 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

marksyzm 24.06.2013 20:17

Мне нравится это решение:

$('#txt_field').bind('input propertychange', function() {
   console.info($(this).val());
});

Потрясающие! Как вы вообще это догадались?

Serj Sagan 25.02.2014 04:44

Просто чтобы люди знали, это работает как при вырезании, так и при вставке.

numaroth 26.08.2014 01:19

Это отличное решение

Faris Rayhan 10.04.2018 12:37

Мне было любопытно, какая привязка что делает, но в итоге мне понадобился только «ввод», чтобы улавливать события ввода с клавиатуры, вставки с клавиатуры и вставки мыши.

Shaun 07.11.2018 14:48

Используйте 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>

Другие вопросы по теме