2009-12-14 9 views
10

Ho un codice che si associa all'azione clic sul caricamento della pagina, è un collegamento. Quando faccio clic, invia una richiesta Ajax e sostituisce il contenuto in alcuni div con la funzione jquery append(). Questo nuovo contenuto ha un link e ho bisogno di legare qualche azione per loro, ma non potrei ... legare non funziona credo, perché jquery append non aggiorna l'albero DOM. Come posso ottenere un legame tardivo?jquery late binding

risposta

11

L'associazione tardiva è ora disponibile utilizzando in diretta l'evento di jQuery():

$('a.my-links-class').live('click', function() { 
    // do your link action here 
}); 
+0

Questo solo fatto il mio giorno. live() è incredibile! – AnApprentice

+8

Dovresti usare 'on()' invece di 'live()'. – Broxzier

2

È necessario utilizzare la funzione live di jQuery, che associa un evento a tutti gli elementi che corrispondono a un selettore, indipendentemente dal momento in cui sono stati creati.

2

È possibile utilizzare jQuery 1.3 s '+ Funzione $().live(event, function). $("a").live("click", myClickFunc) eseguirà il binding allo o allo $("a").bind("click", myClickFunc), ma gli eventi saranno "live", quindi verranno aggiunti gli elementi aggiunti al DOM dopo tale chiamata di funzione. È possibile rimuovere gli eventi dal vivo con $().die(). Per ulteriori informazioni su $(). Live, vedere the documentation for it.

Un'altra opzione sarebbe quella di avere una funzione di legare gli elementi dato un certo contesto (utilizzando la funzione di $ di selezione ha raramente utilizzato secondo parametro):

function myBindEvents(context) { 
    $("a", context).click(myClickFunc); 
} 

e chiamare che ogni volta che si aggiorna un elemento con AJAX :

$("<div>").load("...", "...", function(){myBindEvents(this);}); 

Spero che questo aiuti. :)

5

caso .Live() era deprecato da verions 1.9 in su.

Per chiunque utilizzi la versione successiva di Jquery, è possibile utilizzare l'evento .on(), funziona praticamente allo stesso modo.

14

ci sono 3 funzioni che possono fare questo:

  • $(selector).live(events, data, handler); - jQuery 1.3+ - versione deprecati: 1.7, rimosso: 1,9 (reference)
  • $(document).delegate(selector, events, data, handler); - jQuery 1.4.3+ - A partire da jQuery 1.7, .delegate() è stato sostituito dal metodo .on(). (reference)
  • $(document).on(events, selector, data, handler); - jQuery 1.7+ - preferito (reference)

E 'generalmente consigliato di usare on() ed il suo utilizzo è semplice e probabilmente modo preferito.

  1. Il primo selettore deve esistere quando si chiama la funzione e non può essere eliminato o anche l'evento verrà rimosso (questo può essere document).
  2. Il primo parametro è l'evento (ad es."clic")
  3. Il secondo parametro è il selettore di cui si desidera associare l'evento.
  4. Infine, è possibile aggiungere alcuni dati personalizzati e una funzione all'evento.

Ecco alcuni esempi di codice:

// Make sure the DOM is ready 
$(function() { 
    // Bind the click event to the function 
    $(document).on("click", "a.class", function(event) { 
     // Put your code here. 
    }); 
}); 
+0

Brillante! Mi chiedo perché questo non funziona: $ (function() { $ ('. Class'). On ("clic", "a", funzione (evento) { // Inserisci qui il tuo codice. }); }); – Narayana

+0

Stai cercando un elemento 'a' in un altro elemento con classe' class'? – Broxzier

+0

Sì ... Ho pensato che '$ ('. Class1')' selezionerà tutti gli elementi con una classe di 'class1', il' "a" 'selezionerà i tag di ancoraggio al di fuori di esso e associerà il gestore di eventi. No? – Narayana

4

Metodo .live in JQuery 1.9 è deprecated.So ora u può fare in questo modo:

$("body").on("click", ".classname", function() { ... })