Dans jQuery si vous supprimez un élément sera tout événement sur sa suppression?
-
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.
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