2010-06-01 3 views
7

J'essaie de dissocier tous les gestionnaires d'événements pour tous les éléments qui se trouvent dans un conteneur particulier. Comme un DIV. Mais ces événements ont été liés/enregistrés sans utiliser jQuery. Certains sont liés manuellement avec onclick="...." ou en utilisant du JavaScript natif régulier.La méthode jQuery .unbind() fonctionne-t-elle uniquement sur les événements créés par jQuery?

Mais quand je fais quelque chose comme ça

$('#TheDivContainer').find('div,td,tr,tbody,table').unbind(); 

Il ne semble pas fonctionner. Ce qui m'amène à croire que .unbind() ne fonctionne que si les événements ont été initialement liés par jQuery.

Est-ce vrai? Existe-t-il un autre moyen de délier tous les événements d'un groupe d'éléments?

Merci!

Répondre

7

Vous avez raison. Comme dans le API:

Tout gestionnaire qui a été attaché avec .bind() peut être enlevée avec .unbind().

3

Vous pouvez toujours le faire:

$('#TheDivContainer').find('div,td,tr,tbody,table') 
    .unbind('click') 
    .attr('onclick', ''); // edited to change null to '' 

etc. pour tous les types d'événements appropriés.

+0

Je fatigué votre suggestion ... malheureusement cela n'a pas fonctionné – 7wp

+0

cela fonctionne pour moi - voir cette page de test: http://gutfullofbeer.net/unbind.html - vous pourriez essayer d'appeler 'attr()' avec une chaîne vide comme deuxième paramètre au lieu d'un null! – Pointy

3

Unbind ne fonctionne que sur jQuery a créé des événements comme toutes les méthodes qui fait cela (addEventListener et attachEvent) exige la fois le nœud, nom_événement, et le gestionnaire comme argument. bind prend soin de stocker ceux-ci pour vous ..

Par ailleurs, listerens événement de style DOM0 (.foo = function(...) ne peut par enlevé en réglant la même propriété à quelque chose d'autre comme null.

Questions connexes