In jQuery 1.3, il team ha introdotto il metodo live (), che ci consente di associare i gestori di eventi agli elementi della pagina, nonché a quelli che potrebbero essere creati in futuro in modo dinamico. Sebbene non perfetto, si è rivelato sicuramente utile. In particolare, live () bolle fino in fondo e allega il gestore al documento. Sfortunatamente, cessa di funzionare bene anche quando si incatenano alle chiamate di metodo. Delegato () è stato introdotto nella versione 1.4, che quasi fa la stessa cosa, ma in modo più efficiente.
Esamineremo le differenze specifiche tra i due metodi nel suggerimento rapido del video di oggi. Grazie all'estensione Firebug di FireQuery, avremo gli strumenti per capire più facilmente come funziona ogni metodo.
Opzioni di visualizzazione alternative
Screenr (MP4)
Cliccami
// Bind allega un gestore di eventi solo agli elementi // che corrispondono a un particolare selettore. Questo, prevedibilmente, // esclude qualsiasi elemento generato dinamicamente. $ ("# elementi li"). click (function () $ (this) .parent (). append ("
Nuovo elemento
");); // Live (), introdotto in 1.3, consente il binding // dei gestori di eventi a tutti gli elementi che corrispondono a un selettore //, compresi quelli creati in futuro. // Fa questo allegando il gestore del documento. // Sfortunatamente, non funziona bene con il concatenamento. // Non aspettatevi di concatenare live () dopo chiamate come // children (). next () ... etc. $ ("li"). live ("click", function () $ (this) .parent (). append ("
Nuovo elemento
"), Il delegato, nuovo alla versione 1.4, forse avrebbe dovuto essere un completo // sostituto di Live (). Tuttavia, ovviamente // avrebbe rotto un sacco di codice! Tuttavia, // delegare rimedi a molti delle scorciatoie // trovate in live (). Allega il gestore di eventi // direttamente al contesto, piuttosto che al documento. // Inoltre non soffre dei problemi di concatenamento // che vivono. molti vantaggi prestazionali // utilizzare questo metodo su live (). $ ('# items'). delegate ('li', 'click', function () $ (this) .parent (). append ('
Nuovo elemento
'); ); // Passando un elemento DOM come contesto del nostro selettore, possiamo rendere // Live () si comporta (quasi) allo stesso modo di delegate () //. Allega il gestore al contesto, non // al documento, che è il contesto predefinito. // Il codice seguente è equivalente alla versione delegate () // mostrata sopra. $ ("li", $ ("# items") [0]). live ("click", function () $ (this) .parent (). append ("
Nuovo elemento
"););
Conclusione
Questo può sicuramente essere un argomento confuso. Non esitate a fare domande o discutere all'interno dei commenti. Grazie mille a Elijah Manor per aver chiarito un paio di cose per me su questo argomento!