46 votes

Comment détecter un clic droit de souris + coller en utilisant JavaScript ?

Existe-t-il un moyen de détecter un clic droit suivi d'un collage avec JavaScript sur IE et Firefox ?

Mise à jour :

J'ai décidé d'utiliser Jquery pour le faire :

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

Ce n'est pas exactement ce que je cherchais (parce qu'il est déclenché par 'ctrl + v' ainsi que par 'clic droit + coller' mais je peux le contourner.

Testé sur Chrome, Firefox 3, IE 7 et IE 6, il fonctionne.

0 votes

J'ai peur. Qu'est-ce que vous essayez de faire ? Je pense que dépendre du clic droit et du collage pose de sérieux problèmes d'ergonomie sur le web.

0 votes

Je suis confus. Voulez-vous dire "détecter un clic droit suivi d'un collage" ou "détecter un clic droit, puis faire un collage" ?

0 votes

Désolé pour ça. J'ai changé le titre et ajouté plus de texte pour le rendre plus facile à comprendre.

79voto

oddtwelve Points 348

J'aime cette solution :

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

0 votes

Génial ! Comment t'as fait pour comprendre ça ?

2 votes

Juste pour que les gens sachent, cela fait feu sur couper ainsi que coller.

0 votes

Cette solution est géniale

23voto

TabLeft Points 151
$('#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
       */
    }
});

0 votes

Quirksmode dit que c'est une solution assez solide : quirksmode.org/dom/events/cutcopypaste.html

9voto

epascarello Points 71353

Avec IE vous avez onpaste

Avec Mozilla, vous pouvez regarder dans oninput et

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

Il n'y a pas de solution facile comme bonjour.

Eric

0 votes

Pouvez-vous fournir un exemple complet pour IE et Firefox ? Merci. Et qu'en est-il de Chrome et Safari ?

5voto

Malik Points 553

Utilisez setTimeout() Définir un petit délai d'attente jusqu'à ce que la fonction .val() soit remplie.

$(document).on('paste blur keyup', '#controlId', function(event) {
    var element = $(event.target);
    setTimeout(function() {
        var text = $(element).val();
        // do something with text
    }, 100);
});

Fuente: Capturez l'entrée collée

0voto

BHOW Points 99

J'avais le même problème dans IE8. Chrome me permettait de reconnaître un collage par clic droit, mais pas IE8.

J'ai pu résoudre le problème avec JQUERY en utilisant la fonction "mouse leave" comme décrit par Aaron, mais voici le code :

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

for Chrome:
    $('#field').bind('input',function() {
                doStuff();
            });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X