Uno dei punti forti della nuova versione di jQuery (la 1.7), pubblicato un paio di settimane fa’, sono le funzioni .on() e .off(), che mirano a unificare i diversi metodi che avevamo a disposizione per assegnare e rilasciare i gestori di eventi:.bind(), .unbind(), .delegate(), .undelegate(), .live() e .die().

Usando jQuery .on() e .off()

Si dovrebbe usare da ora in poi questi nuovi paia di metodi, non solo perché semplificano l’API, ma perché è probabile che per le future versioni le altre funzioni scompariranno. Tanto, che se guardiamo il codice della nuova versione, vediamo che l’implementazione dei metodi antichi sono stati sostituiti dalle semplici chiamate .on() e .off().
I nuovi metodi hanno la seguente sintassi:
Copia codice

$(elements).on(events [, selector] [, data], handler);
$(elements).off(events [, selector], handler);
Se non passiamo nessun selettore come parametro a .on() è simile a .bind(), dove è sufficiente associare al gestore a degli elementi. Questo è anche quello che fanno .click(), .hover(), .change(), .submit() e altre abbreviazioni.
Copia codice

$('tr').on('click', evidenziare);
$('tr').bind('click', evidenziare);
Quando un selettore viene passato come parametro, è simile a .delegate(), dove viene aggiunto il gestore agli elementi, ma ciò che vediamo è se l’evento si è verificato nei discendenti filtrato con il selettore. Quando l’evento si verifica, controlla ognuno degli antenati nel DOM fino che non trova quello con il gestore appropriato. Il trattamento della gestione è poi delegata all’antenato, quindi il loro nome. Questo può essere utile, ad esempio, se abbiamo migliaia di righe: si può associare il gestore alla tabella, invece di dover fare su ognuno delle loro righe, che può essere estremamente lento.
Copia codice

$('table').on('click', 'tr', evidenziare);
$('table').delegate('click', 'tr', evidenziare);
L’utilizzo di .live(), che è simile al .delegate(), e anche se si utilizza document come root non è raccomandato, perché l’evento dovrebbe percorrere tutti gli antenati fino a document per trovare il gestore corretto, il che la rende molto più lenta quando la nostra gerarchia è molto profonda. E anche così , se vogliamo, la possiamo imitare:
Copia codice

$(document).on('click', 'tr', evidenziare);
$('tr').live('click', evidenziare);