2010-06-01 12 views
7

Ich versuche, alle Event-Handler für alle Elemente in einem bestimmten Container zu lösen. Wie ein Div. Aber diese Ereignisse wurden gebunden/registriert, ohne jQuery zu verwenden. Einige sind manuell mit onclick="...." oder mit regulären nativen JavaScript gebunden.Funktioniert die Methode jQuery .unbind() nur bei jQuery-erstellten Ereignissen?

Aber wenn ich so etwas wie dies

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

tun scheint es nicht zu funktionieren. Das lässt mich glauben, dass das .unbind() nur funktioniert, wenn die Ereignisse ursprünglich von jQuery gebunden wurden.

Stimmt das? Gibt es eine andere Möglichkeit, alle Ereignisse von einer Gruppe von Elementen zu trennen?

Danke!

Antwort

7

Sie haben Recht. Wie in der API:

Jeder Handler, der mit .unbind mit .bind()() entfernt werden kann, angebracht wurde.

3

Man könnte dies immer tun:

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

usw. für alle entsprechenden Ereignistypen.

+0

ich Ihren Vorschlag müde ... leider es hat nicht funktioniert – 7wp

+0

es funktioniert für mich - siehe diese Testseite: http://gutfullofbeer.net/unbind.html - Sie könnten versuchen, 'attr()' mit einer leeren Zeichenfolge als zweiten Parameter anstelle von Null aufrufen! – Pointy

3

Unbind funktioniert nur bei jQuery-erstellten Ereignissen, da alle Methoden (addEventListener und attachEvent) sowohl den Knoten als auch den Ereignisnamen und als Argument benötigen. bind nimmt diese für Sie zu speichern ..

By the way, Ereignis Dom0 Stil listerens (.foo = function(...) kann nur entfernt, indem durch die gleiche Eigenschaft auf etwas anderes wie null Einstellung.

Verwandte Themen