JQuery - esecuzione del codice per ogni nuovo oggetto DOM istanziato
-
20-08-2019 - |
Domanda
Mi chiedo se ciò sia possibile in JQuery.
Ho del codice Javascript che crea oggetti DOM al volo, in risposta alle azioni dell'utente. Alcuni di quegli oggetti DOM si trovano in una struttura specifica - il contenitore ha sempre lo stesso & Quot; class & Quot; attributo.
Quello che mi piacerebbe fare è, ogni volta che una nuova istanza di un oggetto DOM con classe " X " viene creato, voglio eseguire lo stesso codice Javascript. Quel codice aggiungerà un & Quot; onclick & Quot; evento a quell'oggetto DOM.
Sfortunatamente non posso semplicemente mettere il codice che assegna l'onclick in document.Ready (), poiché gli oggetti a cui si lega vengono creati al volo, molto tempo dopo l'esecuzione di document.Ready ().
JQuery ti consente di impostare collegamenti persistenti che verranno automaticamente associati a un tipo di oggetto DOM, anche se generato al volo?
Soluzione
In passato era coperto da "live", "delegate" o talvolta "bind". Questi sono ora sostituiti da 'on', tuttavia ci sono alcune avvertenze come discusso qui: Persistenza di associazione di eventi Javascript
Altri suggerimenti
Penso di aver trovato la risposta alla mia domanda, proprio nella documentazione di JQuery, abbastanza sorprendentemente.
http://docs.jquery.com/Events/live#typefn
live( type, fn )
Aggiunto in jQuery 1.3: Associa un gestore a un evento (come il clic) per tutti gli elementi corrispondenti correnti e futuri. Può anche associare eventi personalizzati.
Hai cercato un plug-in jQuery chiamato LiveQuery ?
Dalla pagina della documentazione di LiveQuery:
Ad esempio puoi usare il codice seguente per associare un evento clic a tutti i tag A, anche a quelli A potrebbe aggiungere tramite AJAX.
$('a')
> .livequery('click', function(event) {
> alert('clicked');
> return false;
> });
Dopo aver aggiunto nuovi tag A al tuo documento, Live Query vincolerà il file fare clic su evento e non c'è nient'altro che deve essere chiamato o fatto.
Non possibile in jQuery core (come probabilmente avrai realizzato con altre risposte che fanno riferimento ad alcuni plugin) ... questo può essere un compito molto semplice se non hai necessariamente bisogno di tutte le funzionalità di qualcosa come livequery
Per i browser che li supportano, utilizzare l'evento DOM livello 2 - "DOMNodeInserted":
http: // www. w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mutationevents