2010-04-13 5 views

Répondre

2

Les sélecteurs définis à l'aide de .bind() sont libérés lorsque l'élément est supprimé ou .unbind(). Ceux définis en utilisant .live() persistent jusqu'à ce que vous appeliez .die() ou l'élément auquel ils sont liés est supprimé (qui peut être quelque part dans le DOM si vous spécifiez, sinon il sera par défaut à la racine DOM - .live() fonctionne en ne liant pas à l'élément cible l'élément peut être supprimé/remplacé/mis à jour et les écouteurs d'événement sont toujours liés). Les écouteurs de 5 à 20 sonne un peu trop - pensez à lier moins de gestionnaires si possible car les anciens navigateurs craqueront sous la pression beaucoup plus rapidement que les plus récents.

+1

assurez-vous que les éléments sont supprimés via jQuery. La méthode empty() et html() fonctionneront. –

2

Vous pouvez délier un écouteur à l'aide unbind:

$("a").unbind("click"); // remove click event handler(s) 
$("a").unbind(); // remove all event handlers 

et de supprimer live événements à l'aide die:

$("#foo").die(); // remove all live events 
$("a").die("click"); // remove live click event handlers 
3

Pour ajouter à ce que Andy a dit à propos en direct. Vous devez probablement utiliser delegate ou live sur les éléments que vous ajoutez à la page Il semble que vous ne liez pas les événements uniques aux nouveaux éléments (à chaque actualisation) mais réutilisez plutôt les fonctions.

En jQuery 1.4.2 utilisation peut utiliser délégué() comme ceci:

// the container,  the selector, "the event", the function to be called 
$("#container").delegate(".selector", "click",  function(){ 
    // do stuff... 
}); 

Cela aurait seulement besoin d'être appelé une fois et chaque nouvel élément avec la classe « sélecteur » ajouté à la « #container » aura son événement click lié

Questions connexes