Categories
ajax webdev

Binding degli eventi con jQuery

Una delle cose più comode di jQuery è quella di poter associare dinamicamente a particolari azioni dell’utente eventi in js grazie alla funzione bind().

Ad esempio se vogliamo far si che ad un click su un particolare link parta una animazione ci basterà scrivere

[code]
chiudimi

[/code]

il problema dei binding però nasce nel momento in cui vogliamo generare nuovi elementi ai quali applicare “al volo” tutti i trigger precedentemente creati.

L’unica opzione (da me trovata, se ne avete altre comunicatemele!) è quella di far ricaricare (dopo una azione di creazione di nuovi elementi) una funzione che contiene tutti i binding utilizzati.

cioè:

[code]
chiudimi
crea

[/code]

Il problema di questa soluzione è che i bindings precedentemente creati per gli elementi già presenti nella pagina non vengono sovrascritti con il risultato di vedersi eseguito ogni trigger ad una ^2 volte (si potenza di 2!) per elemento creato.

La soluzione è semplice, basta infatti inserire all’interno della funzione bindings() il metodo unbind() che fa da distruttore.

[code]
function bindings()
{
// rimuovo tutti i bindings per poterli ricreare aggiornati
$(‘*’).unbind();

// da qui in poi creo tutti i bindings necessario
}
[/code]

Il tutto facendo particolare attenzione a non creare/gestire trigger al di fuori di questa funzione.

Per curiosità, qualcuno ha risolto in altro modo?

update
la soluzione qui proposta non funziona un granchè con il plugin Interface.js, peccato! :(

ciuaz