La gestione degli eventi in JavaScript rappresenta un altro aspetto tanto essenziale per l'interazione utente quanto mal digerito dai browser. Proprio per questo jQuery fornisce strumenti cross-browser particolarmente avanzati per gestire gli eventi e la loro relazione con gli elementi del DOM. Una spiegazione dettagliata potrebbe risultare lunga e forse poco pratica, considerando che in generale il tipo di interazione più diffuso rimane sempre il classico click del mouse. Per iniziare vediamo un esempio:
$("a").bind("click",function (event) {
alert($(this).attr("href"));
});
Questo esempio associa ad ogni tag a un evento che farà visualizzare il valore href del link specifico.
onclick del tag. Quello che jQuery da in più è la capacità di gestire in modo semplice l'evento stesso. Anzitutto è da notare che this
rappresenta sempre l'elemento a cui è associato l'evento e che non
sempre è quello su cui si è realmente cliccato; questo avviene perché
jQuery (rispettando la gestione eventi nativa in JavaScript) tenta di
risalire l'albero del documento, attivando l'evento specifico nel primo
elemento trovato. Un esempio:
<a href="index.html"><strong>Testo</strong></a>
$("a").bind("click",function (event) {
alert($(this).attr("href"));
});
Quando clicchiamo sul link sopra, in realtà l'elemento su cui agiamo è il tag strong
al quale tuttavia non è associato alcun evento. Quindi jQuery risale
l'albero del DOM, trova l'evento che abbiamo associato al tag a e lo lancia. Questo è un modo intelligente per gestire gli elementi annidati slegandosi dal focus reale del nostro mouse.
Nel caso volessimo sapere qual'è l'elemento realmente cliccato potremo basarci sulla proprietà .target dell'oggetto event che abbiamo passato come argomento alla funzione precedente:
$("a").bind("click",function (event) {
var target = event.target;
alert(target.tagName); //il nome del tag su cui abbiamo cliccato
});
Un'altra proprietà interessante dell'oggetto event è .type,
che indica sotto forma di stringa il tipo di evento che è stato
lanciato. Utilizzando questa proprietà potremmo per esempio creare una
funziona generica in cui, con un costrutto switch o if else, eseguire del codice in base ad eventi specifici:
function lanciaEvento (event) {
if (event.type == "click") {
alert ("Click!");
} else {
alert ("Un altro evento");
}
}
$("a").bind("click focus blur",function (event) {
lanciaEvento(event);
});
Oltre a darci la possibilità di trovare importanti informazioni sugli eventi, l'oggetto event
ci permette di agire direttamente sul loro comportamento, per esempio
bloccandone l'azione predefinita. Per fare un esempio: cliccando su un
link l'azione predefinita del browser sarà quella di caricare la pagina
indicata nell'attributo href. Per bloccare quest'azione predefinita, spesso si ricorre ad uno script del genere:
<a href="link.html" onclick="return false;">clicca qui</a>
Con jQuery diventa invece indolore utilizzare una funzione specifica di JavaScript ma non implementata in IE .preventDefault():
$("a").bind("click",function (event) {
event.preventDefault(); //blocca l'evento di default
// codice da eseguire
});
La stessa cosa può risultare utile per inviare i dati di un form con AJAX modificando il comportamento di un pulsante submit pur mantenendo la possibilità di inviare i dati normalmente nel caso JavaScript sia disattivato:
$(":submit").bind("click",function (event) {
event.preventDefault(); //blocca l'evento di default
var action = $(this).parents("form").attr("action"); //determina il valore di action
//codice AJAX qui
});
PhantomJS, headless browser per test con JavascriptIl tool ideale per realizzare, da terminale, operazioni in remoto su... |
Creare e leggere QR Code in JavaScriptApplicazioni 'QR Code enabled' per il Web e per il mobile,... |
Jquery UI Map: web-mapping con Google Maps e jQueryUn plugin di jQuery UI per intefacciare applicaizoni Web/mobile con... |
Scrollorama e Scrolldeck, slideshow d'effetto con jQueryPlugin jQuery per ottenere Slideshow con diversi effetti di scrolling |
jCanvas, un primo semplice graficoAlla scoperta della libreria jCanvas, per semplificare il disegno e... |
Guida Node.jsIl framework che permette di per usare V8, l'interprete JavaScript... |
Canvas, guida ai frameworkCanvas, tra gli elementi di HTML5 è forse quello di maggior impatto.... |
Guida Javascript: tecniche avanzateUna guida dal taglio pratico per approfondire la programmazione a... |
Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.
Iscriviti alla newsletter
|
|
Corso Webmaster base18 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso JQuery e Ajax per Webmaster03 Luglio 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |
|
|
Corso Webmaster base11 Giugno 2012 a Roma |