Как обнаружить правый клик мыши + вставить с помощью JavaScript? - PullRequest
44 голосов
/ 14 января 2009

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

Обновление:

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

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

Это не совсем то, что я искал (потому что он срабатывает как по Ctrl + V, так и по нажатию правой кнопки + вставка, но я могу обойти это.

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

Ответы [ 7 ]

73 голосов
/ 17 ноября 2011

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

$('#txt_field').bind('input propertychange', function() {
   console.log($(this).val());
});
23 голосов
/ 19 января 2010
$('#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
       */
    }
});
8 голосов
/ 14 января 2009

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

С Mozilla вы можете посмотреть в oninput и

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

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

Eric

4 голосов
/ 13 октября 2014

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

Источник: Вход Catch Paste

0 голосов
/ 04 августа 2015

Я сделал следующее, которое срабатывает только при mouseup:

onmouseup="jQuery(this).on('paste',function(event){setTimeout(function(){alert('Paste detected!');},100);});"
0 голосов
/ 24 марта 2015

У меня была такая же проблема в IE8. Chrome позволял мне распознавать вставку правой кнопкой мыши, а IE8 - нет.

Мне удалось решить проблему с JQUERY с помощью функции отпускания мыши, как описано Аароном, но вот код:

for IE8:
    $( "#field" ).mouseleave(function() {
                doStuff());
            });

for Chrome:
    $('#field').bind('input',function() {
                doStuff();
            });
0 голосов
/ 03 июня 2009

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

  • Функция отпускания мыши в jQuery.

Я заметил, что с IE8, если вы щелкнете правой кнопкой мыши в текстовом поле и затем выберите «вставить», это задержит событие «mouseleave», пока вставка не закончится. Так что он последовательно срабатывает сразу после вставки! :) Работает на меня и на самом деле вытащил меня из беды.

Это только для интранет-приложения, я не тестировал в Firefox и т. Д.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...