evento - simulate click jquery
Evento de clic de Jquery: requiere dos clics para disparar (3)
Esto puede ser súper simple, pero estoy luchando para detectar qué está pasando.
En JS Fiddle: http://jsfiddle.net/3hHAX/
Hay dos enlaces de salida a ''Abrir video modal''.
Como el texto del enlace sugiere, estos dos enlaces deberían abrir una ventana emergente modelo con el video de youtube contenido.
Esto está usando la biblioteca prettyphoto de: http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/
Por alguna razón, el evento click no se activa con el primer clic. Pero funciona en segundo.
(No se ha incluido el CSS, por lo que no se ve muy modal, pero verá la carga de contenido a continuación, al menos para fines de demostración).
¿Alguien puede sugerir qué está pasando mal?
Gracias,
Steve
Dispare el evento de clic después de inicializarlo, y solo permita que se inicialice una vez.
(function($) {
$(".watch-this a, .field-name-field-embed-code a").live(''click'',function(){
if (!$(this).is(".pPhoto")) {
$(this).prettyPhoto({
social_tools: ''''
}).addClass("pPhoto").click();
}
return false;
});
})(jQuery);
Demostración: http://jsfiddle.net/3hHAX/3/
Editar para aclarar:
Esta es una forma muy común de inicializar un complemento en elementos dinámicos. Como se señaló, es mejor inicializar en dom ready si sus elementos no son dinámicos.
Nota:
.live
se deprecia, realmente deberías estar usando .on
(function($) {
$(document).on("click",".watch-this a, .field-name-field-embed-code a",function(){
if (!$(this).is(".pPhoto")) {
$(this).prettyPhoto({
social_tools: ''''
}).addClass("pPhoto").click();
}
return false;
});
})(jQuery);
Gracias chicos,
Ambas respuestas me ayudaron a resolverlo en última instancia.
Solución final en el JSFiddle actualizado:
Parece que prettyPhoto adjunta su propio evento de clic, y solo es necesario aplicarlo a esos elementos dom.
Gracias, Steve
- En primer lugar, nunca uses el método en vivo en jquery, excepto en situaciones en las que el dom está realmente fuera de tu control. Por lo menos debes usar la función de delegado ya que la función en vivo causará mucha desaceleración y muchos problemas (aunque esta vez no fue la culpa)
- En segundo lugar, el evento click se dispara como se puede ver aquí , pero el componente prettyPhotos no funciona la primera vez por razones desconocidas para mí, pero como puede ver en el enlace jsfiddle anterior , funciona con una alerta la primera vez a su alrededor hace clic, por lo que me suena como un error en la secuencia de comandos prettyphotos (que Kevin B parece resolver de manera hackosa al activar un segundo clic).