2010-06-30 14 views
13

Ho una situazione interessante. Devo attivare un clic in tempo reale, perché il semplice clic non funziona.come attivare Live() fare clic su jquery

Questo è quello che ho:

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

ma ho bisogno di qualcosa di simile:

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

o qualcosa per risolvere questo problema.

Questo è il mio codice:

$(".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'); 

} 

L'idea è che voglio innescare $('.lightbox:first').trigger('click');, ma in modalità live, perché semplice click non funziona!

Grazie !!!!

+1

Puoi condividere il contesto di questo problema? –

risposta

10

La soluzione migliore sarebbe quella di mettere il gestore dei clic in una funzione separata.

È quindi possibile chiamare questa funzione sia dal gestore di clic in tempo reale sia quando si desidera attivare manualmente il clic.

+0

Non posso attivare manualmente, perché questa funzione devo chiamare, quando un'altra funzione è "oncompleta" – AlexC

+1

Cosa intendi? Puoi chiamare la funzione sia nel gestore 'live' che altrove (incluso' onComplete') – SLaks

+0

Non puoi semplicemente chiamare la funzione se la funzione richiede un contesto appropriato per funzionare; che può essere luogo comune quando si usa '.live'. Per casi semplici, tuttavia, è possibile fornire semplicemente il contesto o il contesto generico ... ma solo per casi semplici. – srcspider

-4

I belive si può semplicemente utilizzare il primo esempio come trigger viene utilizzato solo per attivare un elemento legato, non per legare esso ..

Così, quando il vostro fare:

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

questo è lo stesso come

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

a parte il primo controlla anche il nuovo html su ogni richiesta di ajax e reindirizza.

quindi basta fare:

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

e dovrebbe far scattare gli elementi in tensione

+1

Sbagliato. 'live' è molto diverso da' bind'. Lo stai confondendo con 'livequery', che funziona in questo modo. – SLaks

+0

sì, ho capito che live è diverso ma una volta che il contenuto Ajax viene restituito e inserito nel DOM, live prende il posto e lega gli elementi prima che l'attività venga copmplet, una volta all'interno della dom e legata al clic, il trigger dovrebbe funzionare per il "nuovo contenuto" – RobertPitt

+3

Ti stai sbagliando. Live non associa alcun elemento. Chiamando 'live' gestiremo l'evento sull'elemento root, che vedrà ogni evento che bolle. Quindi controlla 'e.target' e solleva qualsiasi gestore che si è iscritto a tale destinazione. – SLaks

2

Credo che il problema che stai affrontando è che live() e delegate() non vincolano un gestore di eventi al DOM element/jQuery object stesso, ma ad alcuni parent node. live(), ad esempio, associa un gestore allo document.body che controlla lo event.target. In parole semplici, rende l'uso di event bubbling, questa è l'idea di live events.

In altre parole, utilizzando dal vivo, potrebbe essere possibile per attivare un evento come

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

aggiornamento

purtroppo, che non sembra funzionare. Ho provato anche a impostare currentTarget e relatedTarget. Dove si lega .live() a un gestore? qualcuno?

0

Mentre mi trovavo di fronte a una situazione simile, ho trovato la soluzione di SLaks perfettamente utile. Tuttavia, allegando .live ("clic", handlerFn) e.bind ("click", handlerFn) agli stessi elementi sembra essere in conflitto (non so quali regole di precedenza si applicano in questo caso). Ma funziona bene se si utilizza un evento personalizzato anziché "clic" per il trigger.

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

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

function handlerFn() { 
} 
3

Ho avuto lo stesso problema quando si utilizza Lightbox2 che associa l'evento click utilizzando live(). Nel mio caso la soluzione era quella di attivare l'evento in questo modo:

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

Come si può vedere che stavo attivando l'evento solo dopo che tutte le immagini che utilizzano lightbox sono pronti. Spero che ti aiuti tutti - questo è il mio primo contributo allo stackoverflow :).

0

Questo è un altro modo che funziona per me.

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

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

La parte importante è:

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