web-dev-qa-db-fra.com

Comment remplacer les gestionnaires d'événements jquery

Je vais essayer d'expliquer le problème avec un code simple.

var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').click(fireclick);

Alors maintenant, il alertera évidemment 2 fois mais je n'en ai besoin qu'une seule fois. J'ai essayé tant de façons, mais aucun résultat.

Merci.

73
taras

Depuis jQuery 1.7, vous devez utiliser off pour supprimer les gestionnaires d'événements et on pour les ajouter, bien que vous puissiez toujours utiliser le raccourci click.

$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);

Réponse originale:

Si vous souhaitez remplacer tous les gestionnaires de clics, appelez nbind d'abord sans argument de fonction. Si vous souhaitez remplacer tous les gestionnaires d'événements, ne spécifiez pas le type d'événement.

$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);
130
tvanfosson

Utilisez un espace de noms pour vous assurer de ne supprimer aucun autre écouteur:

$('#clickme').off('click.XXX').on('click.XXX', fireclick);

Tant qu'aucun autre code n'utilise XXX, vous pouvez être sûr que vous n'avez pas gâché un autre comportement que vous ne connaissiez pas.

22
Neil Stevens

Vous pouvez utiliser la fonction jQuery nbind pour supprimer le premier événement:

var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').unbind('click', fireClick); // fireClick won't fire anymore...
$('#clickme').click(fireclick); // ...but now it will
18
moff

J'essaierais d'éliminer les appels supplémentaires, mais à court de cela, vous pouvez vous assurer d'appeler les deux à chaque fois:

$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);
3
Mark Renouf