L'effetto sarà lo stesso, ma il modo in cui il gestore di eventi sta avendo l'evento consegnato è leggermente diverso.
Si sta utilizzando .on()
in ogni caso, ma il selettore non viene utilizzato nella seconda versione. L'evento è delegato nel primo caso ed è direttamente associato nel secondo.Gli stati .on()
documentazione:
Per diretti eventi,
gestore viene chiamato ogni volta che un evento si verifica sugli elementi selezionati, sia che avviene direttamente sull'elemento o bolle da un elemento discendente (interno)
Per delegato eventi,
Il conduttore non viene chiamato quando si verifica l'evento direttamente sull'elemento bound, ma solo per discendenti (elementi interni) che corrispondono al selettore
Cosa accade è quando un evento viene rilevato dal browser che bolle il DOM
. JQuery chiamerà i gestori di eventi che sono stati allegati a ogni elemento durante la navigazione. Nella prima versione l'evento si propaga fino a document
prima che jQuery controlli se l'evento sia stato creato in un elemento class="wrapper1"
. La seconda versione, l'evento smetterebbe di ribollire prima se l'evento era su un elemento class="wrapper1"
.
L'altra differenza è che la prima versione sarà ancora in grado di legare il gestore eventi se .wrapper1
non esiste quando la pagina ha terminato il caricamento, vale a dire se l'elemento si aggiunge dinamicamente la seconda versione non funzionerà. Quando la pagina viene caricata e il jQuery eseguito $('.wrapper1')
potrebbe non esistere.
Se gli elementi .wrapper1
non sono dinamici, probabilmente si troverà un vantaggio di prestazioni (trascurabile) sull'utilizzo della seconda versione.
Tutto questo a parte, il scroll
event does not bubble e non può essere delegato. Tuttavia, possono essere delegati Anche in questo caso dalla documentazione .on()
:
in tutti i browser, gli eventi di carico, di scorrimento, e di errore (ad esempio, su un elemento) non lo fanno bolla. In Internet Explorer 8 e versioni precedenti, gli eventi Incolla e Reimposta non vengono visualizzati. Tali eventi non sono supportati per l'uso con la delega, ma possono essere utilizzati quando il gestore eventi è direttamente collegato all'elemento che genera l'evento.
Quindi l'unica versione che avrebbe funzionato è la seconda! See demo nella console DevTools l'output document scroll
non viene mai visualizzato.
Quindi seguendo la tua [altra domanda] (http://stackoverflow.com/questions/16057384/scroll-in-not-working-in-jquery-for-dynamic-elements) ... – andyb
Ho aggiornato la mia risposta per correggere la frase sull'evento 'scroll' non gorgogliare – andyb