2013-04-07 14 views
5

Prima di jQuery 1.8 Ero in grado di usare .live() per sparare quando veniva cliccato un pulsante che era stato inserito dinamicamente da jquery.Fare clic sull'evento per gli elementi aggiunti al DOM dinamicamente

Ora, .on() e .bind() entrambi non funzionano per gli elementi aggiunti al DOM dopo che la pagina è stata caricata.

Quali sono le opzioni ora?

+0

http://stackoverflow.com/questions/6658752/jquery-click-event-doesnt-work-on-dynamically-generated-elements/14533243 ? noredirect = 1 # comment22575409_14533243 –

+0

Sbagliato. Leggi la documentazione per '.on()'. – SLaks

+0

'.on()' _viene lavorare se passi i parametri appropriati. Hai letto il documento? Se leggi [doco per '.live()'] (http://api.jquery.com/live/) ti spiega come convertire in '.on()' ... – nnnnnn

risposta

14
$(parent_element).on("click", child_selector, function(evt) { 
}); 

http://api.jquery.com/on/#direct-and-delegated-events

eventi delegati hanno il vantaggio di poter elaborare eventi da elementi discendenti che vengono aggiunti al documento in un secondo momento. Selezionando un elemento che è garantito sia presente nel momento in cui il gestore eventi delegato è collegato, è possibile utilizzare gli eventi delegati per evitare la necessità di collegare e rimuovere frequentemente gestori di eventi. Questo elemento potrebbe essere l'elemento contenitore di una vista in un progetto Model-View-Controller, ad esempio, o documentare se il gestore eventi desidera monitorare tutti gli eventi bubbling nel documento. L'elemento del documento è disponibile nella parte iniziale del documento prima di caricare qualsiasi altro codice HTML, quindi è possibile allegare eventi senza attendere che il documento sia pronto.

2

delegato è molto efficiente che sul gestore

$(document).delegate('click', "selector", function() { 
    //your stuff 
}); 
+0

A partire da jQuery 3.0, .delegate() è stato deprecato – m47730

Problemi correlati