2010-06-01 14 views
7

Sto cercando di dissipare tutti i gestori di eventi per tutti gli elementi che si trovano all'interno di un particolare contenitore. Come un DIV. Ma quegli eventi sono stati associati/registrati non usando jQuery. Alcuni sono legati alla modalità manuale con onclick="...." o utilizzando il normale JavaScript nativo.Il metodo jQuery .unbind() funziona solo su eventi creati da jQuery?

Ma quando faccio qualcosa di simile

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

Non sembra funzionare. Il che mi porta a credere che .unbind() funzioni solo se gli eventi sono stati originariamente vincolati da jQuery.

È vero? C'è un altro modo per dissipare tutti gli eventi da un gruppo di elementi?

Grazie!

risposta

7

Hai ragione. Come nel API:

Qualunque conduttore che sono stati associati con .bind() può essere rimosso con .unbind().

3

Si può sempre fare questo:

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

ecc per tutti i tipi di eventi appropriati.

+0

mi stanco il suo suggerimento ... purtroppo non ha funzionato – 7wp

+0

funziona per me - vedi questa pagina di test: http://gutfullofbeer.net/unbind.html - potresti provare a chiamare 'attr()' con una stringa vuota come secondo parametro invece di null! – Pointy

3

Unbind funziona solo su jQuery creato eventi come tutti i metodi che fa questo (addEventListener, e attachEvent) richiede entrambi il nodo, al nomeevento, e il gestore come argomento. bind si occupa di memorizzare questi per voi ..

A proposito, listerens evento stile Dom0 (.foo = function(...) può solo rimosso impostando la stessa proprietà a qualcos'altro come null.

Problemi correlati