Comment copier un nœud DOM avec des écouteurs d'événements?

J'ai essayé

node.cloneNode(true); // deep copy

Il ne semble pas copier les écouteurs d'événements que j'ai ajoutés en utilisant node.addEventListener("click", someFunc);.

Nous utilisons la bibliothèque Dojo.

32
demandé sur Brett DeWoody 2013-03-14 15:48:10

1 réponses

cloneNode() ne copie pas les écouteurs d'événement. En fait, il n'y a aucun moyen de mettre la main sur les écouteurs d'événements via le DOM une fois qu'ils ont été attachés, donc vos options sont:

  • Ajoutez tous les écouteurs d'événements manuellement à votre nœud cloné
  • refactorisez votre code pour utiliser la délégation d'événements afin que tous les gestionnaires d'événements soient attachés à un nœud contenant à la fois l'original et le clone
  • utilisez une fonction wrapper autour de Node.addEventListener() pour garder une trace des écouteurs ajoutés à chaque nœud. C'est de cette façon jQuery clone() la méthode est capable de copier un nœud avec ses écouteurs d'événements, par exemple.
48
répondu Tim Down 2013-03-14 14:12:30