2011-12-12 16 views
23

So che .live() è ora deprecato ma non riesco a cambiarlo e mantenere la funzionalità.Jquery .on versus .live

Ho solo una breve domanda sulla funzione .on() in jQuery. Attualmente sto usando .live()here

Come così:

$('table tr th').live("click", function() { 
}); 

Ma, quando provo e sostituire .live() con .on() non funziona più come dovrebbe.

Ho provato a mettere in

$('table tr th').on("click", function() { 
}); 

così come

$('table tr').live("click", "th", function() { 
}); 

e

$('table tr').delegate("th", "click", function() { 
}); 

ma senza alcun risultato.

Perché questo e quali passaggi è possibile eseguire per farlo funzionare correttamente?

+1

possibile duplicato del [jQuery 1.7 - Accensione diretta() in data()] (http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live- in-on) –

+0

@FelixKling Sto cercando di evitare di usare '$ (document)' per simulare esattamente la chiamata.Mi chiedevo se ci fosse un altro modo per farlo che fosse più in linea con gli esempi sul sito dell'API jQuery. –

+0

Basta prendere l'elemento esistente più vicino (antenato) (che corrisponderebbe più a '.delegate' quindi). –

risposta

31

La funzione on() richiede un aggiornamento sintattica, si dovrebbe modificare il codice per:

$('body').on("click", "table tr th", function()... 

Dai un'occhiata a questo articolo per ulteriori informazioni: http://www.andismith.com/blog/2011/11/on-and-off/

+0

Verissimo, aggiornerò il contesto. –

0

In qualche modo indovino che si aggiungono gli elementi tr nella tabella, non th.

$('table').on("click", "tr th", function(){}); 
+0

I ' sono generati da una matrice e scritti nel primo' 'della tabella. La tua soluzione non funziona però ... –

+0

Che non funziona, la sua tabella viene sostituita usando '.replaceWith()' –

9

Prova questo:

$('table tr th').live("click", function() { 

dovrebbe essere

$(document).on("click", "table tr th", function() { 

è così che si dovrebbe imitare la chiamata .live esattamente. Ovviamente potresti limitare il tuo selettore dal documento a qualcosa di più significativo basato sulla tua struttura DOM.

Edit:

Giusto per chiarire, nel tuo esempio, si sono tenuti a utilizzare $(document).on(... perché la tabella non ha i genitori e viene sostituita durante la vita della pagina.

+0

Quindi, perché sto sostituendo la tabella nel codice ho bisogno di usare '$ (documento)' così che la chiamata continua a funzionare ovunque? –

+0

@Andrew: No, qualsiasi elemento esistente nella gerarchia farà. –

+0

@FelixKling Ah okay, grazie! –

2

Assicurarsi che l'elemento selezionato (il TH/tr) esiste quando la pagina viene caricata inizialmente. Il nuovo .on non funzionerà se questo selettore viene aggiunto in seguito al DOM.

Prova

$('body').on('click', 'thesSelectorForYourTriggerElement', function(){ 
    //callback 
});