L'ajout et la Suppression d'Écouteurs d'Événement avec des paramètres

Je suis en train d'écrire un vanille JavaScript outil, que lorsqu'elle est activée ajoute des écouteurs d'événements pour chacun des éléments passés dans celui-ci.

Je voudrais faire quelque chose comme ceci:

var do_something = function (obj) {
        //do something
    };

for (var i = 0; i < arr.length; i++) {
    arr[i].el.addEventListener('click', do_something(arr[i]));
}

Malheureusement cela ne fonctionne pas, parce que pour ce que je sais, lors de l'ajout d'un écouteur d'événement, les paramètres ne peuvent être passés dans les fonctions anonymes:

for (var i = 0; i < arr.length; i++) {
    arr[i].el.addEventListener('click', function (arr[i]) {
        //do something
    });
}

Le problème est que j'ai besoin d'être en mesure de retirer l'écouteur d'événement lorsque l'outil est désactivé, mais je ne pense pas qu'il est possible de retirer les écouteurs d'événement avec des fonctions anonymes.

for (var i = 0; i < arr.length; i++) {
    arr[i].el.removeEventListener('click', do_something);
}

Je sais que je pourrais facilement utiliser jQuery pour résoudre mon problème, mais je suis en train d'essayer de minimiser les dépendances. jQuery doit obtenir autour de cette en quelque sorte, mais le code est un peu la jungle!

Si le nom de vos auditeurs, vous pouvez utiliser removeEventListener.
Puisque vous savez jQuery peut résoudre votre problème, vous avez juste besoin de lire le code source de la façon dont il fonctionne.
+1 au moins pour les caractères gras les mots " à la vanille JavaScript, et aussi italicising votre point de vue à propos de jQuery! (J'espère que personne ne sera effectivement suggérer jQuery comme une solution maintenant...) Mais aussi +1 parce que c'est une bonne question.

OriginalL'auteur tomturton | 2013-02-26