In breve: .bind()
si applica solo agli elementi attualmente selezionati nell'oggetto jQuery. .live()
si applicherà a tutti gli elementi di corrispondenza correnti, così come a quelli che potresti aggiungere in futuro.
La differenza sottostante tra di loro è che live()
utilizza event bubbling. Cioè, quando si fa clic su un pulsante, quel pulsante potrebbe esistere in un <p>
, in un , in un elemento <body>
; quindi, in effetti, stai facendo clic su tutti questi elementi contemporaneamente.
live()
opere allegando il tuo gestore di eventi per il documento, non al elemento. Quando fai clic su quel pulsante, come illustrato in precedenza, il documento riceve lo stesso evento click. Quindi esegue il backup della linea di elementi targetizzati dall'evento e controlla se qualcuno di essi corrisponde alla tua query.
Il risultato è duplice: in primo luogo, significa che non è necessario continuare a riapplicare gli eventi ai nuovi elementi, poiché verranno aggiunti implicitamente quando si verifica l'evento. Tuttavia, cosa più importante (dipende dalla tua situazione), significa che il tuo codice è molto più leggero! Se si dispone di 50 <img>
tag sulla pagina e si esegue questo codice:
$('img').click(function() { /* doSomething */ });
... allora che la funzione è copiati in ciascuno di questi elementi. Tuttavia, se si ha questo codice:
$('img').live('click', function() { /* doSomething */ });
... allora che la funzione viene memorizzato in un solo posto (sul documento), e si applica a tutto ciò che corrisponde la vostra richiesta al momento dell'evento.
A causa di questo comportamento di bubbling, tuttavia, non tutti gli eventi possono essere gestiti in questo modo. Come notato da Ichiban, questi eventi supportati sono click, dblclick mouse, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup.
Oltre alla risposta di seguito, i lettori potrebbe desiderare di avere uno sguardo a questo * incredibilmente buono * [articolo] (http://www.alfajango.com/blog/the-difference -tra-jquerys-bind-live-and-delegate /) che spiega la differenza tra 'bind',' live' e 'delegate'. Aggiornamento – Jon
: Dal jquery 1.7 -'live() 'è deprecato a favore di 'on()'. – Tapirboy
Alcune informazioni qui http://markupjavascript.blogspot.in/2013/10/bind-live-delegate-on-what-is-difference.html –