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:
$(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.
$('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.
$('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:
$(document).on('click', 'tr', evidenziare);
$('tr').live('click', evidenziare);
Similari
Fondamentali di jQuery
453% JQuery
[nextpage title=”Benvenuti”] jQuery stà diventando rapidamente uno strumento che ogni sviluppatore web di interfacce dovrebbe conoscere. Lo scopo di questo libro è di fornire una panoramica della biblioteca, in modo che qu…
Python per tutti
148% Python
[nextpage title=”Copertina”] Python para todos è un libro sulla programmazione in Python. Questo è un tutoriale su Python adatto a tutti i livelli e si può scaricare in pdf gratuitamente in spagnolo. Il tutoriale di Python…
Estendere Google Analytics con jQuery
46% Plugins
Da un bel po’ di tempo Google Analytics ha aperto la strada per la raccolta gratuita di statistiche del traffico del proprio sito web. Sono sicuro che molti di voi abbiano installato il codice di Google sui vostri siti e a…
Guida allo Zend Framework
43% Zend
Zend Framework è un framework open source per PHP. Zend Framework separa la logica e le azioni usando il pattern MVC (Model View Controller). Cosa è lo Zend Framework? Framework per la costruzione di siti web più veloci e …
Cos’è this?
40% JQuery
Uno degli aspetti più confusi di jQuery è come assegna l’ambito durante il callback. Deve essere parecchio confuso perché l’argomento genera un sacco di domande sulla mailing list di jQuery. Peccato, davvero, perché jQuery…