Guida JQuery UI
Guida JQuery UI
1. Introduzione
Gli obiettivi del progetto; come e dove scaricare jQuery UI
Effetti
2. Animazioni
Animare l'interfaccia attraverso la modifica del colore e delle classi applicate agli elementi
3. Il metodo effect()
Creare effetti avanzati con questo metodo specifico di jQuery UI
Interazioni
4. Generalità
Le interazioni in jQuery UI: sintassi comune
Widget
10. Introduzione ai widget di jQuery UI
Cosa sono i widget e quando usarli
11. Accordion
Nascondere e mostrare elementi in base all'interazione dell'utente
12. Datepicker
Analisi del widget di jQuery UI destinato alla selezione delle date
13. Dialog
Creare e gestire finestre popup, avvisi e messaggi di dialogo
14. Progressbar
Il widget per comunicare all'utente il progresso di un'operazione in corso
15. Slider
Creare e gestire controlli per la modifica 'a scorrimento' di valori
Introduzione
Nel web il campo di studi relativo alle interfacce utente è invece stato limitato dalle scarse risorse di interattività
offerte dai linguaggi web che fino a poco tempo fa erano rappresentate da link e form.
Negli ultimi anni, soprattutto grazie al rinnovamento dei motori di rendering JavaScript e a nuove risorse per i
CSS e non ultimo per l'HTML, è stato possibile sperimentare nuove vie di interazione, applicando e spesso
riadattando i controlli utilizzati in ambiente software alle pagine web.
L'esigenza in questo caso è stata fin da subito quella di rendere l'ambiente del web il più possibile simile a quello
più diffusamente conosciuto dei programmi desktop, applicando pattern come quello delle finestre modali, dei
calendari dinamici e dell'aggiornamento dei dati in tempo reale senza bisogno di refresh.
JavaScript e AJAX sono i principali protagonisti di questa rivoluzione negli usi e costumi delle interfacce
internet, anche grazie all'introduzione di framework e librerie di supporto per gli sviluppatori.
jQuery UI
In questa guida parleremo dell'attuale progetto ufficiale per la realizzazione di interfacce utente di jQuery
(http://javascript.html.it/guide/leggi/168/guida-jquery/), chiamato jQuery UI (http://jqueryui.com/).
Il progetto, nonostante alcuni gravi problemi di compatibilità e stabilità delle prime versioni, ha raggiunto ormai
una buona maturità ed un'architettura estendibile che lo rendono un ottimo punto di partenza per tutti gli
sviluppatori che vogliano dedicarsi alla realizzazione di una moderna applicazione per il web.
Partito come un progetto parallelo a jQuery, UI è stato ben presto inglobato nello sviluppo della libreria, pur
mantenendo un gruppo di sviluppo autonomo ancor oggi guidato da Paul Bakaus, il primo sviluppatore del
progetto. Arrivato alla prima versione stabile nel tardo 2007, ha subito numerose revisioni e riscritture fino
all'attuale versione 1.7. Un'altro contributo importante al progetto viene da Filament Group
(http://www.filamentgroup.com/), l'azienda alla base della struttura grafica dei controlli (o widget) e della loro
architettura a temi (che vedremo in una lezione successiva).
In generale, quest'ultima opzione è utile una volta concluso il progetto e definiti gli effetti ed i controlli di cui
1 di 2 14/06/2012 00:12
Introduzione (versione per la stampa) | Guide JavaScript | Javascript.... http://javascript.html.it/guide/stampa_lezione/4476/introduzione/
Pronti, partenza...
La versione di UI che useremo negli esempi è la 1.7.2 nel formato "completo" che si basa su jQuery 1.3 e
versioni successive.
In ogni caso, tutti i pacchetti scaricati dal sito sono installabili molto semplicemente.
Decomprimete il file scaricato. Troverete tre cartelle: css (contenente il tema dei controlli (nel nostro caso
smothness), js (con i file compressi di jQuery e jQuery UI) e development-bundle (con tutti i sorgenti ed i file
dei singoli moduli della libreria).
inserite questo codice nella sezione della pagina in cui userete jQuery UI:
Nel caso abbiate già inserito un tag per richiamare jQuery, potete omettere la seconda riga. Fate attenzione,
comunque, che la versione 1.7.2 di jQuery UI richiede jQuery 1.3.2.
Vedremo più avanti come poter caricare altri temi e personalizzarli. Al momento iniziamo a scoprire cosa ci offre
jQuery UI a partire dagli effetti grafici.
Per la natura stessa della guida, infine, vi consigliamo di abbinare la sua lettura a quella della Guida jQuery
(http://javascript.html.it/guide/leggi/168/guida-jquery/) per cogliere al meglio le specificità del progetto e i
modi in cui completa l'offerta del framework principale.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:12
Animazioni (versione per la stampa) | Guide JavaScript | Javascript.... http://javascript.html.it/guide/stampa_lezione/4477/animazioni/
Animazioni
Molto spesso gli sviluppatori sono portati ad utilizzare gli effetti grafici come "contorno ludico" alla vera e propria
interazione con l'utente. La diretta conseguenza di questo atteggiamento, è che spesso ci troviamo di fronte a
pagine piene di inutili animazioni che ricordano molto dei giochi in Flash o le vecchie pagine anni '90 farcite di
gif animate.
In realtà, le animazioni sono uno strumento fondamentale per catturare l'attenzione dell'utente, creare
relazioni fra gli elementi dell'interfaccia e creare un'interazione più fluida con i visitatori.
In jQuery UI l'approccio usato dagli sviluppatori è stato quello di implementare gli effetti grafici soprattutto
come estensioni dei metodi già presenti nella libreria di base.
//CSS
//JS
$("#box").text("Errore!").addClass("error",1000);
$("#box").text("Errore!").addClass("error",1000,"linear",function () {
alert("Errore Notificato!");
});
L'introduzione di questa particolare tipologia di effetti è molto importante, in quanto permette di separare la
parte di scripting da quella grafica, semplificando futuri adattamenti grafici o addirittura l'adozione di diversi
stili grafici pur mantenendo inalterato il codice JavaScript. Oltre al parametro della durata, il metodo
.addClass() accetta altri due argomenti opzionali indicanti l'andamento (easing) dell'animazione ed una
funzione da lanciare alla sua conclusione (callback).
$("#box").switchClass('classeCorrente','nuovaClasse',500,'easeOutBounce',function(){
alert("Animazione conclusa!");
});
1 di 2 14/06/2012 00:12
Animazioni (versione per la stampa) | Guide JavaScript | Javascript.... http://javascript.html.it/guide/stampa_lezione/4477/animazioni/
Altri metodi coinvolti nell'estensione sono .removeClass() e.toggleClass(); ambedue accettano i tre
argomenti come .addClass().
Per concludere è stato aggiunto un quarto metodo, .switchClass(), che permette di animare un'elemento a
partire da una classe applicandogli le proprietà di una seconda. Nell'ordine gli argomenti sono: classe
iniziale, classe finale, durata, andamento (opzionale) e funzione conclusiva (opzionale):
$("#box").switchClass('classeCorrente','nuovaClasse',500,'easeOutBounce',function(){
alert("Animazione conclusa!");
});
Easing avanzato
Il terzo campo nel quale UI estende jQuery è il numero di andamenti, in inglese easing, disponibili.
Nato come plugin per jQuery, questo specifico codice JavaScript permette di modificare la dinamica con cui si
svolge l'animazione, simulando effetti elastici o di attrito al fine di rendere più realistica l'animazione.
Potete trovare la lista di tutti gli andamenti disponibili sulla home page del progetto (http://gsgd.co.uk/sandbox
/jquery/easing/).
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:12
Il metodo effect() (versione per la stampa) | Guide JavaScript | Javascri... http://javascript.html.it/guide/stampa_lezione/4478/il-metodo-effect/
Il metodo effect()
L'unico nuovo metodo introdotto dalla libreria è .effect(). Nella sua forma più semplice accetta un primo
argomento stringa che rappresenta il tipo di effetto che vogliamo applicare alla collezione: 'blind', 'bounce',
'clip', 'drop', 'explode', 'fold', 'highlight', 'puff', 'pulsate', 'scale', 'shake', 'size', 'slide',
'transfer'. Ecco un esempio pratico (http://www.html.it/guide/esempi/jqueryui/esempi/02-effetti-03.html)
che li mostra dal vivo.
Di questi effetti i più interessanti sono highlight (spesso usato per evidenziare cambiamenti all'interno di una
pagina, per esempio l'aggiornamento del testo di un box), blind (usato per nascondere un elemento) e
transfer (per indicare il rapporto fra due elementi).
Oltre al tipo di effetto il metodo accetta ulteriori due argomenti opzionali: un oggetto JavaScript per la
personalizzazione dell'effetto ed una funzione da eseguire alla fine dell'animazione. I parametri con i quali è
possibile modificare le impostazioni di base degli effetti variano di caso in caso e sono tutti elencati nella
documentazione ufficiale (http://docs.jquery.com/UI/Effects).
Per esempio highlight accetta un oggetto formato da una chiave per il colore (color) da usare ed una per la
modalità di visualizzazione ("hide" o "show"), mentre blind sostituisce color con direction ("vertical" o
"horizontal") per specificare se l'oggetto va animato in orizzontale o verticale.
Scorciatoie di visualizzazione.
Parte degli effetti disponibili con in metodo .effect() possono essere realizzati anche con alcuni metodi già
presenti in jQuery: .show(), .hide() e .toggle(). Questi metodi accettano gli stessi parametri di .effect(),
ma mantengono l'azione svolta in jQuery, permettendo così di visualizzare un elemento con un effetto a tendina
e nasconderlo con una esplosione (esempio (http://www.html.it/guide/esempi/jqueryui/esempi/02-effetti-
03.html)):
$("#mostrabox").click(function () {
var box = $('#box');
if (box.is(':visible')) {
box.hide('explode');
} else {
box.show('blind');
}
});
Come detto in precedenza solo alcuni effetti possono essere associati ai metodi .show(), .hide() e .toggle():
Blind, Clip, Drop, Explode, Fold, Puff, Slide, Scale. Per tutti gli altri è necessario ricorrere sempre a
.effect().
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
1 di 1 14/06/2012 00:13
Generalità (versione per la stampa) | Guide JavaScript | Javascript.HT... http://javascript.html.it/guide/stampa_lezione/4481/generalita/
Generalità
Una parte molto importante dell'interazione fra utenti ed interfaccia riguarda il tipo di interazione da compiere.
Nel web "tradizionale" le possibilità in questo campo erano abbastanza limitate e si riducevano quasi
esclusivamente al click e alla digitazione da tastiera in campi di form.
Al giorno d'oggi, invece, le librerie UI permettono un'interazione più ricca e molto più vicina a quella diffusa
nelle applicazioni desktop. Alcune di queste interazioni riguardano l'ordinamento degli elementi, il loro
trascinamento e la selezione. Molti di noi sono ormai abituati al diverso contesto interattivo, ma provate a
pensare quanto sia diversa (e più povera) l'interazione che abbiamo con una comune pagina web rispetto al
contesto desktop.
In questo capitolo vedremo come alcune interazioni complesse siano rese semplici da implementare grazie ai
metodi di jQuery UI.
Sintassi comune
Prima di iniziare a vedere nel dettaglio le interazioni, è utile sottolineare che nella maggior parte dei casi è
possibile richiamare ed interagire con i metodi di jQuery UI nello stesso modo. Così, se la sintassi seguente
rende trascinabile un elemento con id box (esempio (http://www.html.it/guide/esempi/jqueryui/esempi
/03-draggable-01.html)):
$("#box").draggable();
a sua volta il metodo accetta un argomento sotto forma di oggetto JavaScript che permette di
personalizzare le opzioni di base. Oltre a tale oggetto, possiamo passare ai metodi degli argomenti come
stringa di testo con i quali, ad esempio, disabilitare l'interazione:
$("#box").draggable("disable");
Se invece volessimo rimuovere definitivamente l'interazione, dovremo passare come primo argomento
"destroy".
Un'ultima possibilità è quella di ricavare o impostare un determinato parametro di configurazione anche dopo
l'inizializzazione dell'interazione:
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
1 di 1 14/06/2012 00:13
Draggable (trascinare oggetti) (versione per la stampa) | Guide JavaScri... http://javascript.html.it/guide/stampa_lezione/4482/draggable-trascinar...
Sebbene spostare oggetti sia un'interazione particolarmente familiare, nel web essa comporta una serie di
considerazioni complesse ed un non meno complesso codice JavaScript per garantire la compatibilità cross-
browser.
jQuery UI risponde a questa esigenza anzitutto con il metodo .draggable() che, associato ad un elemento, lo
rende trascinabile alla pressione del mouse:
$("#contenitore div").draggable();
Per permettere la personalizzazione grafica, a tutti gli elementi associati all'interazione, viene aggiunta la classe
ui-draggable. In più, per permettere un feedback visivo durante il trascinamento, viene aggiunta anche la
classe ui-draggable-dragging.
Opzioni
Naturalmente non tutto si risolve con il semplice metodo senza argomenti: un'interazione di questo tipo
comporta la necessità di essere personalizzabile per aderire al meglio a diverse situazioni ed interfacce.
Questi i parametri principali che possono essere passati al metodo in un secondo argomento di tipo { chiave :
valore} (e il valore di default):
1 di 3 14/06/2012 00:14
Draggable (trascinare oggetti) (versione per la stampa) | Guide JavaScri... http://javascript.html.it/guide/stampa_lezione/4482/draggable-trascinar...
nel caso precedente questa opzione può prevenire interazioni accidentali, tuttavia valori elevati
renderanno gli elementi troppo appiccicosi e difficili da spostare.
grid: (array - false)
Lega il movimento dell'elemento mobile ad una griglia definita in pixel. Questa opzione è utile quando si
ha la necessità di ordinare spazialmente più elementi, per esempio nel caso in cui volessimo rendere
l'idea di una scacchiera. Il valore passato è un array con un valore per la larghezza ed uno per l'altezza di
un blocco della griglia.
handle: (elemento, selettore - false)
Identifica un elemento da utilizzare come maniglia per il trascinamento. In questo modo l'interazione
verrà avviata solo quando l'utente cliccherà e trascinerà quello specifico elemento, ma non in altre parti
dell'elemento mobile.
helper: (stringa, funzione - 'original')
Permette l'utilizzo di elementi di aiuto. Se impostato su 'clone', ad esempio, verrà creato un clone
dell'oggetto da trascinare e sarà spostato quest'ultimo invece dell'elemento originale fino al suo rilascio.
In alcuni casi è possibile generare con una funzione un elemento DOM che funga da segnaposto per
l'elemento (per esempio un piccolo box) in modo da limitare la complessità dell'elemento trascinato,
aumentare le performance e semplificare l'interfaccia. Di default viene utilizzato direttamente l'elemento
da trascinare.
opacity: (decimale - false)
Indica l'opacità che deve assumere l'elemento di aiuto. Può essere utile per indicare visivamente lo stato
precario dell'elemento e per mostrare gli elementi a lui sottostanti.
scope: (stringa - 'default')
Viene utilizzato per raggruppare elementi trascinabili con aree di rilascio specifiche. In pratica serve a
definire dei contenitori entro i quali poter rilasciare gli elementi.
scroll: (booleano - true)
Se impostato su true il contenitore dell'elemento trascinato scorrerà (scrolling) seguendo il movimento.
Questa opzione è utile per facilitare l'interazione ad utenti con basse risoluzioni o schermi piccoli o in
presenza di aree di trascinamento molto estese.
snap: (booleano, selettore - false)
Se impostato ad un selettore o su true, l'elemento trascinato si incollerà ad un elemento adiacente
arrivato ad una certa distanza da questo.
snapMode: (stringa - 'both')
Definisce a quale limite degli elementi adiacenti si incollerà l'elemento trascinato. I valori possibili sono:
'inner', 'outer', 'both'.
snapTolerance: (intero - 20)
La distanza entro la quale si verifica lo snap. L'effetto per l'utente sarà quello di una calamita.
Eventi associati
Oltre alle opzioni è possibile associare all'oggetto passato a .draggable() delle funzioni di callback in base agli
eventi dell'interazione, questi sono:
Tutte le callback ricevono due argomenti: l'evento nativo del browser e un oggetto ui con le seguenti proprietà:
2 di 3 14/06/2012 00:14
Draggable (trascinare oggetti) (versione per la stampa) | Guide JavaScri... http://javascript.html.it/guide/stampa_lezione/4482/draggable-trascinar...
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
3 di 3 14/06/2012 00:14
Droppable (rilasciare oggetti trascinati) (versione per la stampa) | Guid... http://javascript.html.it/guide/stampa_lezione/4483/droppable-rilasciar...
L'interazione droppable è strettamente collegata a draggable e insieme concorrono al paradigma del drag'n'drop
ormai molto diffuso sul web.
Sintetizzando il concetto, droppable realizza il contenitore in cui gli elementi trascinabili possono essere
rilasciati.
$("#dropbox").droppable();
Opzioni
Le opzioni principali che possono essere passate a .droppable() (sempre attraverso un oggetto JavaScript)
sono:
Questa opzione è molto importante per quanto riguarda l'esperienza utente, in quanto da essa dipende
l'usabilità dell'interazione. In realtà nessuna di esse è più indicata dell'altra, ma tutto dipende dalle
dimensioni degli elementi trascinati e dalla distanza fra il punto di inizio e fine del
trascinamento. Ad esempio, intersect è un buon compromesso solo nel caso in cui l'oggetto trascinato
non sia troppo grande, mentre touch potrebbe attivare l'interazione troppo presto rendendo l'interfaccia
imprecisa.
Eventi
Come per .draggable(), è possibile associare una funzione di callback ad alcuni eventi durante l'interazione.
Tutte le funzioni accettano due argomenti: l'evento e un oggetti ui con le seguenti chiavi:
1 di 2 14/06/2012 00:14
Droppable (rilasciare oggetti trascinati) (versione per la stampa) | Guid... http://javascript.html.it/guide/stampa_lezione/4483/droppable-rilasciar...
activate / deactivate: questi eventi sono lanciati quando un elemento a cui è associato .draggable()
viene trascinato o rilasciato. Può risultare utile per evidenziare l'area di rilascio solo quando un oggetto
viene trascinato per mantenere più pulita l'interfaccia.
over / out / drop: questi eventi segnano l'interazione fra l'elemento trascinato e l'area di rilascio,
più precisamente quando l'elemento è dentro l'area (vedi l'opzione tollerance), ne esce oppure vi viene
rilasciato.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:14
Resizable (ridimensionare finestre ed elementi) (versione per la stampa)... http://javascript.html.it/guide/stampa_lezione/4501/resizable-ridimens...
Ridimensionare le finestre del nostro sistema operativo è un'operazione che compiamo spesso e che serve a
gestire meglio la limitata dimensione del nostro monitor; al contrario, sul web l'esigenza di poter ridimensionare
blocchi e finestre a comparsa è stata per molti anni poco sentita, viste le limitate interazioni disponibili per
l'utente.
Con l'introduzione di finestre modali al posto dei pop-up e successivamente di layout "mobili" e personalizzabili,
è stato necessario realizzare anche questo tipo di interazione.
jQuery UI mette a disposizione il metodo .resizable(), che permette di ridimensionare un elemento con
lo stesso tipo di azioni ormai familiari nelle applicazioni desktop semplicemente richiamando su di esso il
metodo:
$("#box").resizable();
In questo modo verranno aggiunte delle maniglie (di default sul lato destro, basso e nell'angolo inferiore
destro del box) con le quali poter allargare o restringere un elemento (esempio (http://www.html.it/guide
/esempi/jqueryui/esempi/05-resizable-01.html)).
L'utilizzo di questa interazione è molto delicato poiché il ridimensionamento di un elemento potrebbe causare
problemi alla visualizzazione di quelli adiacenti o addirittura "scombinare" l'intero layout. Proprio per questo è
importante personalizzarne il comportamento per adattarlo alle nostre esigenze.
Opzioni
Le opzioni di personalizzazione più importanti in questo caso sono:
Fra le opzioni troviamo anche grid, delay e distance, che ricalcano quelle già trovate in .draggable().
Rispettivamente indicano una griglia di ridimensionamento fissa, dopo quanto tempo avviare l'interazione e
dopo quanti pixel di trascinamento di una maniglia. La regolazione di questi parametri concorre alla sensazione
di "appiccicosità" dell'elemento al layout sottostante.
Infine, due tipologie di opzioni contrastanti sono animate e ghost: la prima abilita il ridimensionamento
con un'animazione (e specifici valori per andamento e durata), la seconda crea un helper semitrasparente
1 di 2 14/06/2012 00:14
Resizable (ridimensionare finestre ed elementi) (versione per la stampa)... http://javascript.html.it/guide/stampa_lezione/4501/resizable-ridimens...
La differenza a livello di interfaccia è sostanziale: come succede nei sistemi desktop, un'animazione risulta senza
dubbio più "spettacolare" tuttavia richiede più risorse rispetto ad un helper e soprattutto rallenta l'utente che
deve aspettare la fine dell'effetto per continuare il suo lavoro.
Eventi
Chiudiamo questa lezione con la lista di eventi collegati a .resizable(), che sono start, stop e resize, lanciati
all'inizio, alla fine e durante il ridimensionamento.
Tutti questi eventi accettano due argomenti: l'evento Javascript e un oggetto ui con le seguenti proprietà:
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:14
Selectable (selezionare oggetti) (versione per la stampa) | Guide JavaSc... http://javascript.html.it/guide/stampa_lezione/4525/selectable-selezion...
La caratteristica vincente dei file manager grafici rispetto a quelli testuali o alla riga di comando, è la possibilità
di selezionare file e cartelle semplicemente selezionandole con un click del mouse, oppure disegnando
un rettangolo su più elementi che vengono raggruppati in un'unica selezione.
Il metodo .selectable() di jQuery UI permette di applicare facilmente questa interazione ad elementi presenti
in un interfaccia web, fornendo sia un metodo di selezione multipla "con rettangolo" sia un sistema di
selezione di elementi non contigui con l'uso del tasto Ctrl (o Mela) in abbinamento al click sinistro del
mouse.
Poter selezionare in questo modo degli elementi fornisce un'interazione più veloce e intuitiva con liste di oggetti
rispetto a quelle basate, ad esempio, sui tradizionali checkbox dei moduli (provare per credere
(http://www.html.it/guide/esempi/jqueryui/esempi/06-selectable-01.html)).
Opzioni
Le opzioni pù importanti con le quali personalizzare l'interazione sono:
$("#lista").selectable({filter : "li.selezionabile"});
delay : (intero - 0)
millisecondi dopo i quali selezionare un elemento.
distance : (intero - 0)
solo dopo che il rettangolo di selezione sarà sovrapposto a un elemento per i pixel specificati questo verrà
selezionato. Questa opzione è strettamente legata a quanto impostato in tolerance.
tolerance : (stringa - 'touch')
se impostato su 'touch' l'elemento sarà selezionato appena il rettangolo di selezione lo toccherà,
altrimenti, se impostato su 'fit', tutto l'elemento dovrà essere all'interno del rettangolo di selezione.
Anche in questo caso l'opzione migliore è relativa alle dimensioni dell'area di selezione e degli
elementi selezionabili. Touch è spesso la risposta migliore ma con elementi molto concentrati potrebbe
rendere difficoltosa e frustrante la selezione. Ecco alcuni esempi (http://www.html.it/guide/esempi
/jqueryui/esempi/06-selectable-02.html).
Eventi
Gli eventi associati a .selectable() sono:
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
1 di 1 14/06/2012 00:15
Sortable (ordinare elementi) (versione per la stampa) | Guide JavaScript... http://javascript.html.it/guide/stampa_lezione/4549/sortable-ordinare-...
L'ultima interazione di jQuery UI che affrontiamo è .sortable() e nasce dall'unione di più interazioni delle quali
condivide molte opzioni: .draggable() e .droppable().
La caratteristica aggiuntiva del metodo rispetto alle interazioni che lo compongono è che gli elementi non
vengono solo trascinati e rilasciati, ma vanno a creare un insieme ordinato ricavabile tramite un metodo
specifico. In questo modo è possibile offrire all'utente un sistema intuitivo e diretto per ordinare liste di vario
genere al posto di metodi più tradizionali come select e campi di testo numerici (esempio (http://www.html.it
/guide/esempi/jqueryui/esempi/07-sortable-01.html)).
Configurazione
Come per le altre interazioni, anche .sortable() ha alcune interessanti opzioni di personalizzazione.
Anzitutto condivide opzioni presenti in .draggable(), come axis (per specificare l'asse secondo cui è possibile
trascinare un elemento), delay e distance per controllare quando l'interazione fra il mouse e gli elementi deve
iniziare, oppure grid per costringere gli spostamenti secondo una griglia in pixel.
Il metodo ha anche opzioni proprie, più specifiche per la personalizzazione dell'ordinamento degli elementi:
Eventi
Gli eventi associati all'interazione, e ai quali possiamo collegare una funzione di callback, sono:
Tutti gli eventi prevedono due argomenti: l'evento nativo del browser ed un oggetto ui con le seguenti
proprietà:
1 di 3 14/06/2012 00:15
Sortable (ordinare elementi) (versione per la stampa) | Guide JavaScript... http://javascript.html.it/guide/stampa_lezione/4549/sortable-ordinare-...
.helper: l'helpercorrente.
.position: posizione dell'helper.
.offset: posizione assoluta dell'helper.
.item: l'elemento trascinato corrente.
.placeholder: il segnaposto se definito.
.sender: la lista di provenienza, solo nel caso in cui ci siano liste collegate a quella principale.
Metodi specifici
Come per le altre interazioni, anche .sortable() supporta dei metodi generici per inizializzare o rimuovere
l'interazione, oppure per cambiare alcune opzioni su un'interazione preesistente:
Oltre a questi metodi, comuni a tutte le interazioni, .sortable() ne offre altri utili per gestire l'ordinamento
degli elementi nella lista:
$("#lista1").sortable({
stop : function (event,ui) {
if (ui.item.is(".bloccato")) {
// this si riferisce alla lista
$(this).sortable("cancel");
}
}
});
refresh: aggiorna gli elementi della lista, aggiungendo quelli non presenti al momento
dell'inizializzazione dell'interazione (aggiunti, per esempio, con AJAX).
serialize: serializza gli id degli elementi ordinati, restituendo una stringa inviabile via AJAX o attraverso
un form. La struttura degli id da assegnare agli elementi della lista segue una regola generale del tipo
nomevariable_valore, quindi una lista del tipo:
<ul id="lista">
<li id="lista_1">Uno</li>
<li id="lista_3">Tre</li>
<li id="lista_2">Due</li>
</ul>
"lista[]=1&lista[]=2&lista[]=3"
toArray: raccoglie gli id degli elementi nella lista e li restituisce sotto forma di array JavaScript.
Riprendendo la lista dell'esempio precedente:
2 di 3 14/06/2012 00:15
Sortable (ordinare elementi) (versione per la stampa) | Guide JavaScript... http://javascript.html.it/guide/stampa_lezione/4549/sortable-ordinare-...
Per quanto riguarda il metodo serialize, è possibile modificare il comportamento di default passando un
secondo argomento sotto forma di oggetto JavaScript contenente una o più delle seguenti opzioni:
key: indica una stringa da sostituire alla prima parte dell'id (corrispondente al nome della variabile)
attribute: indica un attributo valido dell'elemento da utilizzare al posto di id
expression: filtra il valore di id (o dell'attributo specificato con attribute) con un'espressione regolare
per estrarne il valore da inserire nella stringa finale.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
3 di 3 14/06/2012 00:15
Introduzione ai widget di jQuery UI (versione per la stampa) | Guide J... http://javascript.html.it/guide/stampa_lezione/4575/introduzione-ai-wi...
Nelle interfacce delle applicazioni web moderne, i controlli nativi dei browser come select, checkbox e campi di
testo, risultano spesso limitativi per le esigenze di interazione con l'utente. In alcuni casi, ad esempio, avere a
disposizione un calendario a comparsa per la selezione delle date facilita l'utente rispetto a dover scegliere da
tre menu a discesa, magari controllando il giorno della settimana sul calendario del sistema operativo.
Questi tipi di controlli web ricadono in jQuery UI sotto il nome di Widget. Il nome potrebbe essere in alcuni
casi fuorviante, visto che è spesso associato ad applicazioni del desktop, tuttavia in questo caso si tratta solo di
controlli atti a semplificare e ordinare la fruizione e l'inserimento dei dati da una pagina web.
Quali Widget?
Un'altra parte del discorso relativa all'utilizzo dei widget è: quali usare e quando?
In linea di principio, è importante utilizzare i widget quando strettamente richiesto, in modo da non
sovraccaricare la pagina con eccessivo codice JavaScript in esecuzione, senza lasciarsi abbagliare dai luccichii
degli effetti grafici.
In definitiva, non sempre i dati vanno divisi in tab o accordion, oppure non sempre mostrare un messaggio con
una finestra modale può migliorare il feedback all'utente (chi di voi non ha mai visto alcuni messaggi di errore di
Facebook, trovandoli eccessivamente tecnici).
Widget disponibili
jQuery UI comprende nativamente sei tipi di widget, completamente compatibili con i temi UI generati da
Theme Roller (http://jqueryui.com/themeroller/) (la web application per la gestione dei temi) e ricchi di opzioni
di personalizzazione.
Accordion
Datepicker
Dialog
Progressbar
Slider
Tabs
Derivando dalle interazioni, tutti i widget ne prevedono una sintassi simile. È quindi possibile passare un oggetto
al metodo che inzializza il controllo, come leggerla e modificarla successivamente:
//inizializzo un widget
$("#accordion").accordion({ active : 2 });
//leggo un'opzione
var active = $("#accordion").accordion("option","active");
// imposto un'opzione
$("#accordion").accordion("option","active",1);
1 di 2 14/06/2012 00:20
Introduzione ai widget di jQuery UI (versione per la stampa) | Guide J... http://javascript.html.it/guide/stampa_lezione/4575/introduzione-ai-wi...
Voglio di più!
In un capitolo successivo di questa guida vedremo come estendere jQuery UI con widget personalizzati. Questo
processo è semplificato da una nomenclatura e una documentazione abbastanza rigorose, ma proprio per
questo è necessario rispettare molte regole e non sempre si raggiunge la flessibilità voluta.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:20
Accordion (versione per la stampa) | Guide JavaScript | Javascript.HT... http://javascript.html.it/guide/stampa_lezione/4576/accordion/
Accordion
Il primo widget che prendiamo in considerazione è Accordion (in italiano "fisarmonica"), un controllo attraverso
il quale vengono nascosti e mostrati determinati blocchi di dati in base all'interazione con l'utente.
Questo tipo di widget viene utilizzato principalmente in due casi: per ridurre l'ingombro del testo nella
pagina oppure per focalizzare l'attenzione dell'utente su una determinata porzione di testo.
Struttura di base
Diversamente da altre librerie UI (per esempio ExtJS), jQuery UI si applica su codice HTML pre-esistente e
quindi, per il corretto funzionamento del controllo è necessario dare una specifica struttura al blocco di codice su
cui vogliamo applicarlo.
<div id="accordion">
<h3><a href="#">Primo headerheader</a></h3>
<div>First contenuto</div>
<h3><a href="#">Secondo header</a></h3>
<div>Secondo contenuto</div>
</div>
A questo punto ci basterà richiamare il metodo .accordion() sull'elemento con id accordion per attivare il
widget (esempio (http://www.html.it/guide/esempi/jqueryui/esempi/09-accordion-01.html)):
$("#accordion").accordion();
Opzioni
Accordion offre un buon numero di opzioni (http://docs.jquery.com/UI/Accordion#options) per personalizzare il
comportamento del widget. Le più interessanti sono:
1 di 2 14/06/2012 00:20
Accordion (versione per la stampa) | Guide JavaScript | Javascript.HT... http://javascript.html.it/guide/stampa_lezione/4576/accordion/
Metodi
Oltre ai metodi comuni ai widget jQuery UI, .accordion() offre un metodo specifico per attivare una delle
sue porzioni di testo, in modo da poter interagire con il controllo anche senza l'azione diretta dell'utente:
$("#accordion").accordion("activate",2);
Eventi
Come per le interazioni, è possibile associare delle funzioni di callback a determinati eventi:
change: lanciato quando l'accordion cambia. Se il widget è animato, l'evento sarà lanciato al
completamento dell'animazione.
changstart : lanciato appena ha inizio un cambiamento nel widget.
Gli eventi possono essere passati al metodo .accordion() direttamente all'interno dell'oggetto contenente le
opzioni, oppure con il metodo .bind():
Ambedue gli eventi accettano due argomenti: l'evento JavaScript nativo e un oggetto ui con le seguenti
proprietà:
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:20
Datepicker (versione per la stampa) | Guide JavaScript | Javascript.H... http://javascript.html.it/guide/stampa_lezione/4588/datepicker/
Datepicker
Molto probabilmente ognuno di noi si sarà imbattuto, durante la compilazione di un form, in spiegazioni ed
etichette di campo del tipo gg/mm/aaaa oppure gg/mm/aa. Altrettanto spesso si sarà trovato di fronte a tre
menu a tendina dai quali dover scegliere giorno, mese ed anno, magari chiedendosi che giorno della settimana
sarà il 14 Aprile 2010.
Tutti questi passaggi, controlli, etichette e spiegazioni mettono in evidenza come sia difficile lavorare in
maniera intuitiva e diretta con le date.
L'utilizzo principale di questo tipo di controllo è da una parte quello di facilitare l'utente nell'inserimento di
date in vario formato, dall'altro quello di ridurre al minimo errori nella formattazione delle date stesse.
Nella sua forma più semplice, il widget è attivabile su ogni elemento di input testuale selezionabile con jQuery
(esempio (http://www.html.it/guide/esempi/jqueryui/esempi/10-datepicker-01.html)):
$(".data:input").datepicker();
Opzioni
Data la diversità di utilizzo e la necessità di adattamento a vari formati di data (sia per sintassi che per lingua),
datepicker offre un nutrito numero di opzioni che spaziano dall'impostazione del formato restituito, al
restringmento delle date selezionabili a determinati range. Il tutto concorre ad ottimizzare l'esperienza utente e
la gestione dell'input nella fase di rielaborazione dei dati.
L'esempio più classico nel quale si ha necessità di personalizzare il widget datepicker è quello di un modulo di
prenotazione nel quale è necessario prevedere più lingue ed evitare che accidentalmente un utente possa
richedere una prenotazione per date nel passato.
Per sintetizzare, le caratteristiche personalizzabili del widget riguardano l'interazione (in che modo il controllo
viene attivato), il formato della data e gli elementi visibili del calendario.
Opzioni di formato
Di default, il linguaggio di datepicker è l'inglese, compresa la formattazione della data secondo lo schema
mese/giorno/anno. Il modo più semplice per impostare il formato corretto in base al proprio linguaggio è quello
di richiamare uno dei file di lingua presenti nella cartella i18n. In questo modo la localizzazione prescelta
sarà applicata automaticamente ad ogni istanza del widget.
Nei casi in cui si dovessero gestire più lingue basterà includere il file di lingua completo jquery-ui-i18n.js ed
1 di 3 14/06/2012 00:21
Datepicker (versione per la stampa) | Guide JavaScript | Javascript.H... http://javascript.html.it/guide/stampa_lezione/4588/datepicker/
$("#calendario").datepicker($.datepicker.regional['it']);
$.datepicker.setDefaults($.datepicker.regional['it']);
Opzioni di visualizzazione
Le opzioni di questo gruppo servono per aggiungere o personalizzare il modo in cui viene visualizzato il
calendario:
Eventi
Datepicker accetta fra le sue opzioni anche una serie di eventi, utili per impostare l'interazione fra il widget ed
altri elementi della pagina:
beforeShow: lanciato appena prima che il calendario venga mostrato. La funzione collegata accetta due
argomenti, un'istanza dell'input a cui è associato il widget e un'istanza del datapicker stesso;
beforeShowDay: lanciato prima della visualizzazione del calendario. La funzione accetta come
argomento una data e deve restituire un array con tre elementi: true o false per rendere il giorno
selezionabile, una stringa che rappresenti una classe CSS per la presentazione di default, un tooltip da
associare al giorno. Fate attenzione che questa funzione verrà applicata a tutti i giorni presenti nel widget
comportando una diminuzione nelle performance del controllo soprattutto durante la visualizzazione
iniziale e se sono visualizzati più mesi tramite l'opzione numberOfMonths;
beforeShow: permette di definire una funzione personalizzata quando il datepicker passa da un
mese/anno all'altro. Accetta come argomenti l'anno selezionato, il mese (1-12), e l'istanza del datepicker.
2 di 3 14/06/2012 00:21
Datepicker (versione per la stampa) | Guide JavaScript | Javascript.H... http://javascript.html.it/guide/stampa_lezione/4588/datepicker/
Metodi specifici
Il widget, oltre ai metodi generali di jQuery UI visti in precedenza, offre metodi specifici per interagire con i dati
provenenti dal controllo, nonché per interagire con lo stesso.
hide / show: nasconde e mostra il datepicker. Utile quando si vuole mostrare il calendario senza
attendere che l'utente attivi il comportamento predefinito;
getData / setData: ricava ed imposta la data del datepicker. Per setData è necessario fornire un
ulteriore argomento seguendo la stessa sintassi richiesta delle opzioni minDate e maxDate;
dialog: apre il datepicker in un overlay (o finestra di dialogo). È necessario indicare come ulteriore
argomento la data iniziale per il datepicker, mentre si possono aggiungere opzionalmente altri tre
argomenti: una funzione di callback a seguito della selezione di una data, un oggetto JavaScript con
nuove opzioni per la visualizzazione, la posizione dell'overlay alto/sinistra in formato [x, y] oppure un
evento del mouse contenente tali coordinate. Se questo argomento non viene specificato, la finestra sarà
centrata nello schermo.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
3 di 3 14/06/2012 00:21
Dialog (versione per la stampa) | Guide JavaScript | Javascript.HTML.it http://javascript.html.it/guide/stampa_lezione/4599/dialog/
Dialog
Nell'utilizzo di un sistema operativo, ognuno di noi ha a che fare con il paradigma delle finestre. Sviluppate a
partire dai primi anni 80, rappresentano il mezzo principale di presentazione del contenuto, sia esso un
messaggio singolo o un insieme di testi, immagini e controlli utente.
Nel web l'utilizzo di questa interfaccia è stato per molto tempo veicolato da controlli nativi del browser e del
sistema operativo, con finestre di dialogo e popup. Il vantaggio di queste soluzioni era quello di essere
estremamente facili da realizzare, tuttavia la loro derivazione prettamente desktop le rendeva poco integrate
con il resto dell'interfaccia web.
Con l'avvento di librerie grafiche come jQuery UI è stato possibile realizzare le finestre a partire da blocchi di
HTML e CSS resi interattivi tramite JavaScript.
Il metodo offerto da UI si appoggia sulle interazioni draggable e resizable per garantire le funzionalità tipiche
di una finestra in ambiente desktop, e permette la personalizzazione grafica grazie alla completa compatibilità
con i temi di Themeroller. Per richiamarlo basta lanciarlo sull'elemento che vogliamo usare come finestra:
$('#finestra').dialog();
Di default il widget verrà aperto automaticamente e realizzerà una finestra con una barra del titolo, un'icona per
la chiusura e cinque maniglie di ridimensionamento (i quattro lati più l'angolo in basso a destra). Quando la
finestra viene ridimensionata, il contenuto in eccesso è nascosto e appaiono automaticamente delle barre di
scorrimento. Ecco un esempio (http://www.html.it/guide/esempi/jqueryui/esempi/11-dialog-01.html).
Opzioni
Essendo basato su due interazioni di UI, resizable e draggable, .dialog() condivide con loro molte opzioni,
tuttavia ne presenta alcune specifiche per la sua personalizzazione:
$('#finestra').dialog({
buttons : {
"Annulla": function() { $(this).dialog("close"); }
[...]
}
});
1 di 2 14/06/2012 00:21
Dialog (versione per la stampa) | Guide JavaScript | Javascript.HTML.it http://javascript.html.it/guide/stampa_lezione/4599/dialog/
Per una lista completa delle opzioni fate riferimento alla documentazione ufficiale (http://docs.jquery.com
/UI/Dialog#options) mentre in questa pagina (http://www.html.it/guide/esempi/jqueryui/esempi/11-dialog-
02.html) sono disponibili degli esempi pratici.
Eventi
Come per gli altri widget è possibile interagire con dialog anche attraverso funzioni di callback associabili a
specifici eventi che si verificano durante l'interazione fra controllo ed utente:
beforeclose: lanciato quando l'utente cerca di chiudere la finestra. Se la funzione associata restituisce
false, la finestra resterà aperta. Potrebbe essere utile nel caso si voglia verificare che l'utente abbia
compilato dei campi di input obbligatori presenti nella finestra;
open / close: lanciati quando la finestra si apre o chiude;
focus: lanciato quando la finestra riceve il focus da parte dell'utente (solitamente quando l'utente clicca
su di essa);
dragStart / drag / dragStop: ereditati da draggable vengono lanciati quando la finestra è spostata
(inizio, durante, fine);
resizeStart / resize / resizeStop: ereditati da resizable vengono lanciati quando la finestra è
ridimensionata (inizio, durante, fine).
Metodi
Oltre ai metodi comuni a tutti i widget, dialog mette a disposizione alcuni interessanti metodi per interagire con
le finestre direttamente via script:
open / close: con questi metodi è possibile mostrare e nascondere le finestre senza la necessità che
l'utente le richiami direttamente;
moveToTop: quando sono aperte più finestre nella pagina, potrebbero risultare sovrapposte le une alle
altre. Con questo metodo è possibile portare in primo piano una delle finestre;
isOpen: questo metodo restituisce true se la finestra è visibile, altrimenti restituisce false.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:21
Progressbar (versione per la stampa) | Guide JavaScript | Javascript.... http://javascript.html.it/guide/stampa_lezione/4630/progressbar/
Progressbar
Nelle applicazioni desktop ci imbattiamo spesso in barre di progresso che hanno il duplice compito di mantenere
viva l'attenzione dell'utente (dare feedback) e indicare con una certa approssimazione quanta parte di
un'operazione è stata compiuta.
Per consuetudine ormai acquisita, una barra di progresso viene interpretata dall'utente come la
rappresentazione grafica di un valore percentuale.
Il problema maggiore con questo tipo di controllo utente è che per rappresentare realmente una percentuale è
necessario conoscere in precedenza il valore finale che dovrà essere raggiunto. Sul web tale valore può
rappresentare una dimensione fisica oppure un lasso di tempo: in entrambi i casi non sempre è possibile
reperire questi dati.
Proprio per questo, nella maggior parte dei casi viene preferito come feedback per l'utente uno spinner, ovvero
un'animazione in gif che richiami l'idea di attesa e caricamento.
Proprio per questi motivi, l'uso del widget progressbar in jQuery UI è indicato soprattutto come feedback
visivo del completamento di passaggi successivi in un'operazione complessa. L'esempio tipico è la
compilazione di un modulo di registrazione ad un sito: se il modulo richiede la compilazione di molti campi è
preferibile spezzare l'operazione in sottogruppi più piccoli ed utilizzare una barra di progresso per indicare
all'utente quanto manca alla fine.
Nella sua forma più semplice una progressbar viene attivata con il seguente codice:
$('#barra').progressbar();
In questo modo all'elemento #barra verrà applicato il tema specifico di jQuery UI che renderà la barra di
progresso scalabile (cioè si adatterà al cambiamento di dimensione del contenitore) e soprattutto aggiornabile
con facilità. Ecco un esempio pratico (http://www.html.it/guide/esempi/jqueryui/esempi/12-progressbar-
01.html) di utilizzo del widget.
Opzioni
L'unica opzione offerta da progressbar è value che permette di impostare e aggiornare il valore percentuale di
completamento nella barra:
Eventi
Progressbar offre un unico evento change che viene lanciato quando il valore della barra cambia.
Metodi
Oltre ai metodi comuni a tutti i widget di UI, progressbar offre un metodo specifico value che può essere usato
per impostare o ricavare il valore della barra:
$('#barra').progressbar('value', 70);
1 di 2 14/06/2012 00:22
Progressbar (versione per la stampa) | Guide JavaScript | Javascript.... http://javascript.html.it/guide/stampa_lezione/4630/progressbar/
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:22
Slider (versione per la stampa) | Guide JavaScript | Javascript.HTML.it http://javascript.html.it/guide/stampa_lezione/4657/slider/
Slider
Gli slider (o controlli a scorrimento) sono abbastanza comuni nell'esperienza quotidiana di ognuno di noi, anche
al di fuori del mondo digitale e delle interfacce dei PC.
Possono controllare il volume di una radio oppure la luminosità di una lampada e sono utilizzati solitamente
per permettere la variazione lineare di un valore (almeno in apparenza). Questa familiarità del controllo lo
rende molto più efficace di select e campi numerici.
$('#slider').slider();
In questo modo verrà visualizzato uno slider con un cursore scorrevole e un valore impostabile fra 0 e 100
(esempio (http://www.html.it/guide/esempi/jqueryui/esempi/13-slider-01.html)).
Opzioni
Le opzioni offerte per personalizzare lo slider vanno ad influire sul suo comportamento e sui valori accettati
(documentazione ufficiale) (http://docs.jquery.com/UI/Slider#options):
Eventi
È possibile interagire con i vari stati di slider grazie a quattro eventi:
start / stop: come per altri widget questi due eventi vengono lanciati all'inizio ed alla fine del
trascinamento del cursore dello slider.
change: come per stop, questo evento viene lanciato alla fine del movimento del cursore, tuttavia
intercetta anche eventuali modifiche al valore dello slider applicate via scripting (ad esempio con il
metodo value).
slide: viene lanciato durante il trascinamento del cursore. Può essere utilizzato, ad esempio, per
aggiornare un campo testuale con il valore numerico impostato in tempo reale.
1 di 2 14/06/2012 00:22
Slider (versione per la stampa) | Guide JavaScript | Javascript.HTML.it http://javascript.html.it/guide/stampa_lezione/4657/slider/
Tutte le funzioni associate agli eventi di slider accettano due argomenti: l'evento JavaScript nativo ed un oggetti
ui con le seguenti proprietà:
Metodi
Oltre ai metodi comuni a tutti i widget, slider offre due metodi aggiuntivi per impostare o ricavare i valori
impostati dall'utente:
value: attraverso questo metodo è possibile impostare o ricavare il valore di slider sotto forma di numero
intero:
//Ricava il valore
$('.#slider').slider('value');
//Imposta il valore
$('.#slider').slider('value',25);
values: si comporta come value ma viene utilizzato per slider con cursori multipli. Accetta come
argomento il numero intero indicante l'indice (partendo da 0) del cursore su cui si vuole lavorare:
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:22
Tabs: opzioni (versione per la stampa) | Guide JavaScript | Javascript... http://javascript.html.it/guide/stampa_lezione/4664/tabs-opzioni/
Tabs: opzioni
L'utilizzo delle schede (tab) per gestire blocchi di contenuto molto corposi o di diversa natura è ormai divenuta
una soluzione comune nel campo dell'interface design, tanto da essere spesso preso come metro di valutazione
dell'aggiornamento di un software.
Se prendiamo ad esempio il campo dei web browser, una delle pecche maggiormente messe in evidenza del
vecchio IE6 era la mancanza della navigazione a tab ormai comune in Firefox ed Opera. Peraltro questa
soluzione progettuale è diventata così pervasiva da aver invaso anche l'interfaccia di prodotti desktop come
Office.
Per quanto riguarda il web, l'uso di tab è indicato nei casi in cui ci sia necessità di suddividere un contenuto
in blocchi ben distinti, dando così più rilievo alle singole parti via via visualizzate dall'utente.
È invece buona norma evitare le tab (e altre strutture come gli accordion) nel caso in cui il contenuto sia
sostanzialmente omogeneo o comunque presenti rimandi interni, in modo da evitare che l'utente debba saltare
continuamente da una scheda all'altra.
Nella sua configurazione di default, il widget tab è richiamato con il seguente codice:
$('#tabs').tabs();
e crea una struttura di navigazione a schede a partire da una struttura HTML come la seguente (esempio live
(http://www.html.it/guide/esempi/jqueryui/esempi/14-tabs-01.html)):
<div id="tabs">
<ul>
<li><a href="#fragment-1"><span>Uno</span></a></li>
<li><a href="#fragment-2"><span>Due</span></a></li>
<li><a href="#fragment-3"><span>Tre</span></a></li>
</ul>
<div id="fragment-1">
<p>Testo 1</p>
<pre><code>$('#tabs').tabs();</code></pre>
</div>
<div id="fragment-2">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit...
</div>
<div id="fragment-3">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit...
</div>
</div>
Sebbene questa struttura possa essere realizzata con una semantica più corretta, essa rimane comunque
leggibile e navigabile anche quando CSS e JavaScript sono disabilitati, garantendo anche un elevato grado di
accessibilità.
Come vedremo più avanti il widget non si limita ad applicare una serie di interazioni ed effetti grafici al
contenuto preesistente, ma permette anche di caricare dinamicamente il contenuto delle schede, di aggiungere
e cancellare schede on demand.
Opzioni
1 di 2 14/06/2012 00:23
Tabs: opzioni (versione per la stampa) | Guide JavaScript | Javascript... http://javascript.html.it/guide/stampa_lezione/4664/tabs-opzioni/
Come per altri widget complessi, è possibile adeguare in profondità l'aspetto e le funzionalità delle tab secondo
le proprie necessità progettuali. Ecco le principali:
ajaxOptions: (oggetto)
un oggetto JavaScript contenente le opzioni per la gestione del caricamento di contenuti nelle tab via
AJAX (vedere $.ajax (http://docs.jquery.com/Ajax/jQuery.ajax#options) per le proprietà disponibili).
cache: (booleano - false)
se impostato su true il contenuto delle schede caricato con AJAX sarà salvato nella cache. Per evitare che
anche le richieste AJAX siano salvate nella cache del brower dovrete aggiungere l'opzione cache : false
in ajaxOptions.
collapsible: (booleano - false)
permette di rendere collassabili tutte le schede, lasciando visibili solo le etichette.
cookie: (oggetto - null)
salva l'ultima scheda selezionata in un cookie, per essere riutilizzata come scheda di default quando
l'utente ritorna sulla pagina. Richiede l'utilizzo del plugin cookie (http://plugins.jquery.com/project
/cookie). L'oggetto passato come valore dell'opzione dev'essere formattato secondo quanto previsto dal
plugin cookie, ad esempio: { expires: 7, path: '/', domain: 'jquery.com', secure: true }.
event: (stringa - 'click')
l'evento che permette di visualizzare il contenuto di una scheda. In alcuni casi potrebbe essere preferibile
associare l'apertura di una scheda all'evento mouseover, tuttavia bisogna tener conto dei problemi
legati al movimento involontario del mouse da parte dell'utente.
panelTemplate / tabTemplate: (stringa)
indicano un modello al quale applicare il contenuto di tab caricate in remoto (AJAX) rispettivamente per la
scheda (default '<div></div>') e l'etichetta (default '<li><a href="#{href}"><span>#{label}
</span></a></li>').
selected: (intero : 0)
indica l'indice (a partire da 0) della scheda di default al momento dell'inizializzazione del widget. Per non
impostare alcuna tab passate il valore -1. Se richiamata dal metodo 'option', questa opzione
restituirà l'indice della scheda attiva corrente sotto forma di intero.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:23
Tabs: eventi e metodi (versione per la stampa) | Guide JavaScript | Java... http://javascript.html.it/guide/stampa_lezione/4666/tabs-eventi-e-metodi/
Eventi
Proprio per la complessità del widget, gli sviluppatori ci hanno messo a disposizione una nutrita serie di eventi
con i quali interagire per controllare al meglio l'integrazione di tab con gli altri elementi dell'interfaccia e
l'insieme dell'esperienza di navigazione:
select: è lanciato quando viene selezionata una scheda, più precisamente quando è invocato l'evento
dell'opzione event (di default click).
load: lanciato quando il contenuto di una scheda caricato da remoto viene caricato completamente.
show: lanciato quando una scheda viene mostrata e diventa attiva.
add / remove: lanciato quando viene aggiunta una nuova scheda
enable / disable: lanciato quando una tab viene ablitata o disabilitata.
Tutte le funzioni di callback associate agli eventi accettano come argomenti l'evento JavaScript nativo ed un
oggetto ui con le seguenti proprietà:
Metodi
Attraverso i metodi specifici per tab è possibile interagire via script con le schede gestite dal widget nonché
gestirne il comportamento relativamente alle opzioni di caricamento e aggiunta dinamica di contenuti via AJAX:
add: attraverso questo metodo è possibile aggiungere una scheda al widget sia associandovi un
contenuto già presente nel documento, sia caricandolo da remoto. Al momento non è ancora supportata
la possibilità di caricare contenuti da siti esterni (AJAX cross domain).
Il metodo necessità di due argomenti: il primo di tipo stringa dev'essere un'ancora legata ad un
contenuto presente nel documento oppure un URL da cui caricare in modo asincrono un frammento di
HTML. Il secondo argomento obbligatorio è una stringa da utilizzare come testo della nuova etichetta.
Opzionalmente è possibile passare un indice di tipo numerico per posizionare la nuova scheda in una
posizione precisa del widget, che altrimenti sarà inserito in fondo (esempio (.http://www.html.it/guide
/esempi/jqueryui/esempi/14-tabs-02.html)).
remove: rimuove dal widget una tab specifica in base al numero di indice passato come argomento
(partendo da 0).
1 di 2 14/06/2012 00:23
Tabs: eventi e metodi (versione per la stampa) | Guide JavaScript | Java... http://javascript.html.it/guide/stampa_lezione/4666/tabs-eventi-e-metodi/
$('#tabs').tabs('remove',2);
load: ricarica il contenuto di una specifica scheda caricato dinamicamente. Può essere utile nel caso il
contenuto sia soggetto ad aggiornamenti costanti (per esempio un lettore di feed RSS)
url: cambia l'URL associato ad una scheda dinamica. Necessita di altri due argomenti indicanti
rispettivamente la posizione della scheda nel widget (a partire da 0) ed il nuovo indirizzo da cui caricare i
contenuti.
length: restituisce il numero di tab caricate nel widget.
abort: cancella tutte le richieste AJAX ancora in sospeso per tab caricate dinamicamente.
rotate: attiva una rotazione automatica fra le schede del widget. Accetta come ulteriori argomenti un
intero indicante i millisecondi fra la visualizzazione di una scheda e la successiva, nonché un valore
booleano opzionale per stabilire se la rotazione debba essere continua o fermarsi quando l'ultima scheda
è divenuta attiva.
Questo metodo è molto utile quando il widget viene usato come teaser dei contenuti di un sito.
Anzitutto potrebbe essere necessario mantenere la navigazione dei link presenti in una scheda
all'interno di quest'ultima, piuttosto che aprirli in una nuova finestra o nella finestra corrente. In tal caso si
può ricorrere allo script seguente in fase di inizializzazione del widget:
$('#tabs').tabs({
load: function(event, ui) {
$('a', ui.panel).click(function() {
$(ui.panel).load(this.href);
return false;
});
}
});
In secondo luogo è importante sottolineare che ogni componente che richieda un calcolo sulle sue dimensioni
durante l'inizializzazione non funzionerà se caricato in una scheda nascosta, poiché la scheda stessa è nascosta
via CSS con display: none. Un accorgimento utile può essere quello di sovrascrivere il CSS nativo di jQuery UI
con il seguente:
.ui-tabs .ui-tabs-hide {
position: absolute;
left: -10000px;
}
In modo da nascondere le tab inattive semplicemente spostandole al di fuori del viewport. In realtà questa
soluzione non è sempre efficace in quanto molto legata allo specifico contesto del layout dell'applicazione.
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
2 di 2 14/06/2012 00:23
Themeroller e i temi di jQuery UI (versione per la stampa) | Guide Jav... http://javascript.html.it/guide/stampa_lezione/4667/themeroller-e-i-tem...
Nelle lezioni introduttive abbiamo visto come la struttura grafica dei widget e delle interazioni di jQuery UI sia in
gran parte veicolata dall'inclusione di un file CSS compreso nel pacchetto di installazione.
Dietro a questo file CSS si nasconde un'idea particolarmente innovativa per quanto riguarda i framework UI in
JavaScript: quella di tema grafico.
Nel nostro caso il tema grafico che abbiamo sempre utilizzato nei nostri esempi è chiamato smoothness e viene
rilasciato insieme alla libreria di base.
La struttura di questo tema rispecchia il markup generato dai vari metodi e widget di UI, spesso molto
complessi e verbosi e proprio per questo apparentemente ingestibili nel caso si volessero applicare
personalizzazioni per uniformare i controlli alla nostra interfaccia.
In realtà il team di jQuery UI, in collaborazione con Filament Group, ha sviluppato un applicativo online
chiamato Themeroller per gestire con semplicità quest'operazione.
Themeroller
Themeroller è un applicativo online raggiungibile all'indirizzo http://jqueryui.com/themeroller/
(http://jqueryui.com/themeroller/) che permette di modificare il tema base smoothness secondo le proprie
esigenze con un alto grado di personalizzazione.
Fate attenzione che cliccando sul link di download dei temi verrete reindirizzati all'utility di download di jQuery
UI, perciò dovrete scaricare tutto il pacchetto ed estrarre la cartella del tema dala directory css.
Inoltre, ogni tema mette a disposizione classi specifiche per la visualizzazione e la strutturazione di icone,
messaggi contestuali ed altre parti dell'interfaccia. A tal riguardo potete fare riferimento a questo articolo
(http://javascript.html.it/articoli/leggi/3008/gestire-i-css-in-jquery-ui/), oppure riferirvi direttamente alla
documentazione ufficiale (http://docs.jquery.com/UI/Theming/API)
© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina
http://www.html.it/info/note-legali.php
1 di 1 14/06/2012 00:24