Dans jQuery si vous supprimez un élément sera tout événement sur sa suppression?

StackOverflow https://stackoverflow.com/questions/1538243

  •  20-09-2019
  •  | 
  •  

Question

Par exemple, si j'ai un lien avec l'événement suivant lié à elle:

$("a.d").bind("click", this, onDelete);

Et faire plus tard:

$("a.d").remove();

Est-ce bien? Ou faut-il provoquer une fuite de mémoire et je dois appeler unbind 1er?

Merci pour toute aide.

Était-ce utile?

La solution

Je ne l'ai pas testé, mais je crois que la suppression d'un élément se délie ses gestionnaires d'événements. Je viens à cette conclusion de la jQuery documentation API (recherche de supprimer) qui stipule que si vous voulez déplacer un élément d'une partie du DOM à l'autre ce qui suit:

$("#foo").remove().appendTo("#bar");

doit être écrit comme

$("#foo").appendTo("#bar");

pour éviter de perdre les gestionnaires d'événements.

Autres conseils

De jQuery docs pour supprimer ()

  

Supprime tous les éléments correspondants de la   DOM. Cela ne les supprime pas de   l'objet jQuery, vous permettant d'utiliser   les éléments appariés supplémentaires. Remarque   que cette fonction en commençant par 1.2.2   supprimera également tous les gestionnaires d'événements   et les données mises en cache en interne.

La réponse est oui, tant que l'événement a été attaché avec jQuery. Si attaché avec quelque chose comme « onclick » Je ne crois pas que ce sera.

Cet article traite certains de cela. Il définit également une fonction récursive pour supprimer tous les événements de clic pour un élément et tous ses enfants. Il couvrira les gestionnaires de clic jQuery ainsi que les gestionnaires définis avec onclick de sorte que vous êtes couvert.

http: / /www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/

function RecursiveUnbind($jElement) {
    // remove this element's and all of its children's click events
    $jElement.unbind();
    $jElement.removeAttr('onclick');
    $jElement.children().each(function () {
        RecursiveUnbind($(this));
    });
}

Pour utiliser la fonction dans l'exemple précédent, nous appellerions la fonction en lui transmettant le div « conteneur » comme un objet jQuery.

RecursiveUnbind($('#container'));

Pour mémoire, ne vous inquiétez pas au sujet des fuites de mémoire en javascript. (Homme froid, pas c ++!)

moteur javascript du navigateur gère tous les objets et les ordures recueille. Quand je dis des objets, cela signifie que les fonctions de manipulation-événement aussi, car les fonctions sont aussi des objets en javascript.

Sans rapport: J'aime la façon dont tout est un objet en javascript: D

Vive!
JRH

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top