45 votes

Comment délier un gestionnaire d'événement spécifique

Code :

$('#Inputfield').keyup(function(e)
        {
            if(e.which == 13)
            {
                functionXyz();
            }
            else
            {
                functionZyx();
            }
    });  

$(document).keyup(function(exit) {
              if (exit.keyCode == 27) { functionZzy(); }
});

Pregunta: Comment supprimer le gestionnaire d'événements keyup de keyCode == 27 et conserver les autres gestionnaires d'événements $(document).keyup intacts ?

80voto

Nick Craver Points 313913

Vous devez utiliser une fonction nommée afin de pouvoir faire référence à ce gestionnaire spécifique lorsque vous appelez .unbind() comme ceci :

function keyUpFunc(e) {
  if (e.keyCode == 27) { functionZzy(); }
}
$(document).keyup(keyUpFunc);

Puis plus tard, au moment de la déliaison :

$(document).unbind("keyup", keyUpFunc);

64voto

Felix Kling Points 247451

Vous attachez les gestionnaires d'événements à différents éléments, donc vous pouvez en toute sécurité retirer le gestionnaire de l'objet spécifique (déjà mentionné je sais).

Dans un souci d'exhaustivité, si vous souhaitez attacher plusieurs gestionnaires pour le même événement à la fonction el mismo vous pouvez utiliser Événements à espacement des noms :

$('#Inputfield').bind('keyup.keep', function(e){/*...*/});
$('#Inputfield').bind('keyup.notkeep', function(e){/*...*/});

$('#Inputfield').unbind('keyup.notkeep');
// or event  $('#Inputfield').unbind('.notkeep');

Depuis jQuery 1.7 les méthodes .on y .off sont le moyen privilégié d'ajouter et de supprimer des gestionnaires d'événements. À cette fin, ils se comportent exactement comme .bind y .unbind et fonctionnent également avec des événements à espacement de noms.

9voto

Dan D. Points 697

JQuery vous permet de lier des événements qui seront déliés après leur première invocation. Si vous souhaitez n'exécuter cette fonction keyup qu'une seule fois, consultez la méthode .one() présentée ici : http://api.jquery.com/one/

$(document).one('keyup', function(e) {
              if (e.keyCode == 27) { functionZzy(); }
});

7voto

lonesomeday Points 95456

Si vous n'avez qu'un seul gestionnaire sur un élément, vous pouvez le délier en toute sécurité en utilisant la fonction unbind sans utiliser de fonctions nommées comme le suggère Nick Craver. Dans ce cas, l'appel

$('#Inputfield').unbind('keyup');

n'affectera pas le gestionnaire sur document .

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