Metodo one
Il metodo one permette di aggiungere un gestore
di eventi a un elemento. Dopo che l'evento
si è attivato una volta - il gestore sarà
rimosso automaticamente.
Sintassi
In questo modo attacchiamo un gestore di eventi a un elemento,
come primo parametro sotto forma di stringa
viene passato uno o più eventi separati da
spazi, il secondo - passiamo i dati sotto forma di oggetto JavaScript,
che vengono passati al gestore nella proprietà
event.data quando l'evento si attiva. Il secondo parametro
è opzionale. Il terzo passiamo la funzione gestore,
a cui viene passato l'oggetto evento o passiamo false:
$(selettore).one(eventi, [dati], funzione-gestore(oggetto evento));
Si può passare come secondo parametro un selettore
filtrante aggiuntivo per i discendenti all'interno dell'elemento,
il terzo - dati aggiuntivi, che vengono passati
al gestore nella proprietà event.data quando
l'evento si attiva. Il secondo e il terzo parametro
sono opzionali. Il quarto passiamo
la funzione-gestore, a cui viene passato l'oggetto evento
e parametri aggiuntivi opzionali. Se invece della
funzione-gestore si passa false, allora la funzione semplicemente
restituirà false:
$(selettore).one(eventi, [selettore], [dati], funzione-gestore(oggetto evento));
Si può utilizzare il metodo one in un altro modo,
allora nel primo parametro viene passato
un oggetto JavaScript, dove le chiavi - il tipo di evento, e
i valori - la funzione-gestore, che abbiamo aggiunto
all'elemento:
$(selettore).one({'tipo evento': handler}, [selettore], [dati]);
Se non passiamo un selettore aggiuntivo, allora l'evento si attiva sull'elemento a cui attacchiamo il gestore, altrimenti - sull' elemento discendente, che corrisponde a quel selettore (eventi delegati).
Esempio
Facciamo in modo che al click sul paragrafo vengano mostrati i dati, che
abbiamo passato al metodo one. Ai click successivi
non succederà nulla. Utilizzeremo la
funzione-gestore testFunc,
che abbiamo creato:
<p>click</p>
function testFunc(event) {
alert(event.data.text);
}
$('p').one('click', {text: 'aaa' }, testFunc);