2011-03-13 24 views
5

¿Alguien me puede aclarar sobre el delegado jQuery? ¿Qué eventos se manejan y cuáles no? El código de seguimiento no funcionajQuery .delegate() no funciona en los eventos load y changeData

$("#browser").delegate(".photo", { 
    "load": function(e) { 
     alert("photo loaded"); 
    } 
}); 

pero el código siguiente trabajo

$(".photo").load(function(e) { 
    alert("photo loaded"); 
}); 

También trato de delegar caso changeData a una clase que no funciona tan bien

$("#browser").delegate(".thumbnail", { 
    "changeData": function(e, prop, value) { 
     alert(prop + " = " + value); 
    } 
}); 

pero el siguiente código funciona

$(".thumbnail").bind("changeData", function(e, prop, value) { 
    alert(prop + " = " + value); 
} 
+0

Ambas respuestas que has obtenido hasta ahora son correctas. Estás usando la sintaxis incorrecta, y no puedes usar 'live' y' delegate' con esos eventos. –

Respuesta

11
No

:

$("#browser").delegate(".photo", { 
    "load": function(e) { 
     alert("photo loaded"); 
    } 
}); 

Pero:

$("#browser").delegate(".photo", "load", 
    function(e) { 
     alert("photo loaded"); 
}); 

Y no se puede utilizar en vivo y delegar con esos eventos, porque no hacen burbuja.

+0

Estoy pasando un objeto con evento múltiple: function() se empareja en un delegado, y funciona en 1.5.1 para mí;) – jhloke

+1

Bueno, no está en los documentos, eso no significa que no funcione . De todos modos, esos eventos no se pueden usar con Live o Delegate. Entonces tendrás que encontrar otra forma de lograr esto. Como actualizar el enlace del evento al cambio. – Aidiakapi

6

Estos eventos no tienen burbujas, por lo que no se pueden usar con live o delegate.

+0

Gracias. Pensé que la carga es un evento javascript nativo, que debería burbujear. ¿Quiere decir que el desencadenador changeData de jquery api en sí mismo no es un evento personalizado o no funciona? De todos modos, ¿puedo usar delegado en ambos eventos? – jhloke

+0

Investigo el código jquery de changeData y modifico el triggerHandler para que se active. Pero sospecho que a veces se bloquea google chrome. – jhloke

0

hay nuevas versiones de jQuery, donde se favorece el método .on() antes de que los métodos .delegate() o .live(), no va a funcionar de esta manera, también

// wrong 
jQuery(selector).on('load', 'img', myFunc) 

porque el evento de carga no burbujea

haz que sea así

jQuery(selector).find('img').on('load', myFunc) 
+1

Esta es la delegación ** no **. –

+0

Es una delegación disfrazada. – HerrSerker

+3

No creo que esto funcione porque 'find ('img')' encuentra las imágenes anexadas pero no las que se cargarán. ¿Derecha? –