web-dev-qa-db-fra.com

Comment dissocier un gestionnaire d'événements spécifique

Code:

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


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

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

45
MeProtozoan

Vous devez utiliser une fonction nommée pour pouvoir référencer ce gestionnaire spécifique lors de l'appel de .unbind() , comme ceci:

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

Puis plus tard lors de la dissociation:

$(document).unbind("keyup", keyUpFunc);
80
Nick Craver

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

Par souci d'exhaustivité, si vous souhaitez attacher plusieurs gestionnaires pour le même événement au même objet , vous pouvez utiliser événements avec espace de 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 et .off sont le moyen préféré pour ajouter et supprimer des gestionnaires d'événements. À cet effet, ils se comportent exactement comme .bind et .unbind et fonctionne également avec les événements avec espace de noms.

63
Felix Kling

jQuery vous permet de lier des événements qui ne seront pas liés après leur première invocation. Si vous cherchez à exécuter cette fonction de frappe une seule fois, regardez la méthode .one () répertoriée ici: http://api.jquery.com/one/

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

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

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

n'affectera pas le gestionnaire sur document.

7
lonesomeday