2010-06-01 13 views
7

Estoy tratando de desvincular todos los controladores de eventos para todos los elementos que están dentro de un contenedor particular. Como un DIV. Pero esos eventos se han vinculado/registrado no utilizando jQuery. Algunos están vinculados de forma manual con onclick="...." o con JavaScript nativo habitual.¿El método .unbind() de jQuery solo funciona en eventos creados con jQuery?

Pero cuando hago algo como esto

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

No parece trabajar. Lo que me lleva a creer que el .unbind() solo funciona si los eventos han sido vinculados originalmente por jQuery.

¿Es eso cierto? ¿Hay alguna otra manera de desvincular todos los eventos de un grupo de elementos?

Gracias!

Respuesta

7

Tienes razón. Como en el API:

Cualquier controlador que se ha unido con .bind() puede ser eliminado con .unbind().

3

Siempre se puede hacer esto:

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

etc., para todo tipo de eventos adecuados.

+0

que su sugerencia cansado ... por desgracia no funcionó – 7wp

+0

me funciona - vea esta página de prueba: http://gutfullofbeer.net/unbind.html - ¡podría tratar de llamar 'attr()' con una cadena vacía como el segundo parámetro en lugar de un nulo! – Pointy

3

Unbind sólo funcionará en jQuery creado eventos como todos los métodos que hace esto (addEventListener y attachEvent) requiere que el tanto el nodo, nombre_evento, y el manejador como un argumento. bind se encarga de almacenar estos para usted ..

Por cierto, listerens evento de estilo Dom0 (.foo = function(...) puede solamente por eliminado mediante el establecimiento de la misma propiedad a otra cosa, como null.

Cuestiones relacionadas