La differenza tra l'assegnazione di gestori di eventi con bind() e ogni() di jQuery?
-
09-09-2019 - |
Domanda
qualcuno può dirmi qual è la differenza tra l'assegnazione di gestori di eventi utilizzando bind():
$(function(){
$('someElement')
.bind('mouseover',function(e) {
$(this).css({
//change color
});
})
.bind('mouseout',function(e) {
$(this).css({
//return to previous state
});
})
.bind('click',function(e) {
$(this).css({
//do smth.
});
})
});
e l'utilizzo di ogni() per la stessa attività:
$('someElement').each(function(){
$(this).mouseover(function(){$(this).css({/*change color*/})
.mouseout(function(){$(this).css({/*return to previous state*/});
});
});
});
grazie.
Soluzione
Dagli esempi che hai dato, penso che in realtà stai chiedendo quale sia la differenza, se c'è tra il "binding" metodo e quindi un 'evento' metodi.
Per esempio, qual è la differenza tra:
$('.some_element').bind('click',function() { /* do stuff */ });
...e questo?
$('.some_element').click(function() { /* do stuff */ });
La risposta è che davvero non importa.È una questione di preferenza.L'evento metodi sono sintatticamente più semplice e coinvolgere meno di battitura, ma, per quanto ne so non c'è davvero alcuna differenza.Io preferisco usare i bind metodi, perché è possibile utilizzare la scorciatoia evento vincolante, se avete bisogno di collegare più di un evento per la stessa azione.Rende anche più semplice capire quando/se avete bisogno di 'separare' un evento.
Vedi qui: Differenza tra .legare e altri eventi
Ma, da quello che la domanda chiede: "Qual è la differenza tra la 'di ogni metodo e il "binding " metodo"...beh, questo è un modo completamente diverso di bestia.
Non si dovrebbe mai usare realmente la 'di ogni metodo per collegare gli eventi, in quanto il "bind" e 'l'evento' metodi utilizzare il molto più veloce selettore CSS motore (in jQuery caso, utilizza lo Sfrigolio del motore).
Non c'è quasi mai (o quasi mai) in un caso in cui questo:
$('.some_element').each(function() { $(this).click(function() { /* do something */ }); });
...è meglio di questo:
$('.some_element').bind('click',function() { /* do stuff */ });