2010-06-30 34 views
13

Tengo una situación interesante. Necesito activar un clic en vivo, porque el simple clic no funciona.cómo activar Live() haga clic en jquery

Esto es lo que tengo:

$('.text').trigger('click'); 

pero necesito algo como esto:

$('.text').trigger(live('click' ...)); 

o algo para solucionar este problema.

Este es mi código:

$(".Sets a.largeImage").fancybox({ 

    'onComplete': function(){ 
    return errorimage(myurl); 
    } 

}); 

function errorimage(url) { 

    $("#fancybox-img").live('click', function(){ 
    $('.lightbox:first').trigger('click'); 
    }); 

    $('#fancybox-img').trigger('click'); 

} 

La idea es que quiero para disparar $('.lightbox:first').trigger('click');, pero en modo directo, porque simple clic no funciona!

Gracias !!!!

+1

¿Se puede compartir el contexto de este problema? –

Respuesta

10

La mejor solución sería colocar su manejador de clics en una función separada.

Puede llamar a esta función desde el controlador de clics en vivo y cuando desee activar manualmente el clic.

+0

No puedo disparar manualmente, porque esta función tengo que llamar, cuando otra función es "onComplete" – AlexC

+1

¿Qué quieres decir? Puede llamar a la función tanto en el controlador 'live' como en cualquier otro lugar (incluido' onComplete') – SLaks

+0

No puede simplemente llamar a la función si la función requiere el contexto apropiado para funcionar; que puede ser un lugar común cuando se usa '.live'. Para casos simples, simplemente puede proporcionar dicho contexto o contexto genérico ... pero solo para casos simples. – srcspider

-4

Me creer que sólo puede utilizar el primer ejemplo como disparador sólo se utiliza para activar un elemento enlazado, no para obligar a éste ..

Así que cuando su hacer:

$('#someElement').live('click',function(){./*..*/}); 

Ésta es la misma como

$('#someElement').click(function(){./*..*/}); 

aparte de la primera, también se busca nuevo html en cada solicitud de ajax y se une de nuevo.

por lo que acaba de hacer:

$('div.class').trigger('click'); 

y debe desencadenar los elementos vivos

+1

incorrecto 'live' es muy diferente de' bind'. Lo estás confundiendo con 'livequery', que funciona así. – SLaks

+0

sí entiendo que en vivo es diferente pero una vez que el contenido de Ajax vuelve y se inyecta en el DOM, live toma su lugar y une los elementos antes de que la tarea sea compilada, una vez dentro del dom y vinculado al clic, el disparador también debería funcionar para el "nuevo contenido" – RobertPitt

+3

Estás equivocado. Live no enlaza ningún elemento. Llamar a 'live' manejará el evento en el elemento raíz, que verá cada evento que brota. Luego verifica 'e.target' y plantea cualquier manejador que se haya suscrito a ese objetivo. – SLaks

2

Supongo que el problema que estamos enfrentando es que live() y delegate() no se unen un controlador de eventos para el DOM element/jQuery object en sí, pero en algunos parent node. live() por ejemplo, vinculará un controlador al document.body que comprueba el event.target. En palabras simples, hace uso de event bubbling, esa es la idea de live events.

En otras palabras, el uso directo, que podría ser posible para desencadenar un evento como

$(document.body).trigger({ 
    type: 'click', 
    target: $('.text')[0] 
}); 

actualización

por desgracia, eso no parece funcionar. Traté de establecer también el currentTarget y relatedTarget. ¿Dónde se une un controlador a .live()? ¿alguien?

0

Como me enfrentaba a una situación similar, encontré la solución de SLaks perfectamente útil. Sin embargo, adjuntar .live ("clic", handlerFn) y.bind ("click", handlerFn) a los mismos elementos parece estar en conflicto (no sé qué reglas de precedencia se aplican en tal caso). Pero funciona bien si utiliza un evento personalizado en lugar de "hacer clic" para el desencadenador.

$(".elems").bind("customEvent", handlerFn); 
$(".elems").live("click", handlerFn); 

$(".elems").trigger("customEvent"); 

function handlerFn() { 
} 
3

Tuve el mismo problema al usar Lightbox2 que vincula el evento click con live(). En mi caso, la solución era para disparar el evento como este:

jQuery**('a[rel^="lightbox"]')**.ready(function() { 
jQuery("#myimglink").trigger("click"); 
}) 

Como se puede ver que estaba activa el evento sólo después de que todas las imágenes que utilizan caja de luz están listos. Espero que les ayude a todos, siendo esta mi primera contribución al stackoverflow :).

0

Esta es otra forma que funciona para mí.

$('#test').live('click', function() { 
    alert("It works!");    
}); 

$('#test')[0].click(); 

La parte importante aquí es:

$('#test')[0].click(); 
Cuestiones relacionadas