Comments
Description
Transcript
Lezione4_OggettiBis
Oggetti Client-Side Stefano Bistarelli Thanks to Roberto Bruni e Daniela Giorgetti Oggetti client-side Navigator MimeType Window Plugin History Button Reset Location Document Frame Plugin Layer Link Form Image Area Anchor Applet Submit Text Password Hidden Textarea Checkbox Radio FileUpload Select Option Bruni e Giorgetti 2 Oggetti top Oggetto navigator • Rappresenta il browser in uso • Permette di ottenere informazioni su nome e versione (e altro) • Supportato da N.N. e I.E. • Ha due oggetti figli (supportati solo da NN): Plugin e Mimetype • Ogni browser può avere proprietà non standard – o anche rendere scrivibili proprietà di sola lettura (IE generalmente molto permissivo) Bruni e Giorgetti 4 navigator: proprietà fondamentali navigator.appCodeName // “Mozilla” per NN2/3/4 e IE3/4 navigator.appName // “Netscape” per NN e “Microsoft Internet Explorer” per IE navigator.platform // sistema operativo dove gira il browser, es. “Win32”, “MacPPC” navigator.appVersion //descrizione più completa della piattaforma e del browser navigator.userAgent //stringa inviata dal browser ai server nelle richieste di pagine web Bruni e Giorgetti 5 navigator: linguaggio utente navigator.language // lingua di default del browser, es. “en”, “it”, “fr”, “fr_CA”, etc. (solo NN4+) navigator.systemLanguage // lingua di default (solo IE4+) navigator.userLanguage // lingua dell’utente (solo IE4+) Bruni e Giorgetti 6 Oggetto window • Ogni browser presenta una finestra (window) • La window racchiude le azioni dell’utente e gli elementi che devono comparire sullo schermo • L’oggetto window è considerato il più alto nella gerarchia client-side (contiene tutti gli altri eccetto navigator) • nei riferimenti a metodi e proprietà si può omettere window • self è sinonimo di window • Possono esserci più oggetti di tipo Window attivi contemporaneamente • Non ha tag corrispondenti Bruni e Giorgetti 7 window: proprietà fondamentali window.frames // array dei frame contenuti nella finestra window.length // lunghezza dell’array dei frames window.parent // finestra o frame genitore window.top // finestra master window.location // oggetto location per la finestra corrente Bruni e Giorgetti 8 window: proprietà fondamentali window.status // stringa che compare attualmente sulla barra di stato della finestra window.defaultStatus // stringa che compare per default sulla barra di stato della finestra Bruni e Giorgetti 9 Oggetti di primo livello Oggetti di primo livello • l’oggetto window ha quattro oggetti figli • possono essere riferiti senza usare la parola chiave window – – – – document frame history location Bruni e Giorgetti 11 Oggetto document • Forse è il più importante • responsabile di tutto quello che compare sulla pagina • controparte del tag <BODY> • permette di implementare le caratteristiche dinamiche di HTML • contiene gli elementi dell’interfaccia utente (UI = User Interface) di applicazioni web • proprietà e metodi dipendenti dal browser Bruni e Giorgetti 12 document: proprietà fondamentali document.anchors // array delle ancore nel documento document.links // array dei link document.forms // array delle form document.images // array delle immagini document.plugins // array dei plugin document.applets // array delle applet document.embeds // array degli embed Bruni e Giorgetti 13 document: proprietà colore document.bgColor // stringa che indica il colore dello sfondo document.fgColor // colore testo document.alinkColor // colore link attivati document.linkColor // colore dei link non visitati document.vlinkColor // colore link visitati Bruni e Giorgetti 14 document: informazioni utili document.location // URL del documento corrente (deprecata, sola lettura, non confondere con window.location! corrisponde quasi sempre a window.location.href) document.URL // come sopra, ma non deprecata document.title // titolo del documento document.domain // dominio internet da cui proviene il documento (sola lettura) document.lastModified // stringa che indica la data della modifica più recente al documento (sola lettura) Bruni e Giorgetti 15 Oggetto location • ogni oggetto window è progettato per presentare delle informazioni all’utente • location racchiude l’origine delle informazioni – ovvero l’URL • permette di estrarre singole parti come il dominio, il protocollo, etc. • tutte le proprietà sono accessibili in lettura e scrittura: basta modificarle per caricare un nuovo documento – si può assegnare una stringa con la nuova URL direttamente a window.location Bruni e Giorgetti 16 location: proprietà fondamentali location.href // URL completo del documento attualmente visualizzato (lettura e scrittura, come tutti gli altri). protocol://hostname:port/pathname?search#hash es. http://www.oreilly.com:1234/catalog/search.html?query=JS&match=2#result protocol “http:” hostname “www.oreilly.com” port “1234” host “www.oreilly.com:1234” pathname “/catalog/search.html” search “?query=JS&match=2” hash “#result” Bruni e Giorgetti 17 Oggetto frame • rappresenta un singolo frame all’interno di un frameset • nelle pagine con frame, la window è la pagina che contiene la definizione dei frameset, le altre sono ad essa collegate come frame Bruni e Giorgetti 18 Oggetto history • Caratteristica principale dei browser: tenere traccia delle URL visitate nella sessione • possiamo sfruttarla per navigare avanti e indietro nella lista history • es. un pulsante per tornare indietro di due pagine • per motivi di sicurezza i browser più recenti non supportano le proprietà current, next e previous Bruni e Giorgetti 19 Quiz riassuntivi I – Quale sono gli oggetti di livello più alto? • • • • window, navigator window, navigator, document window navigator – Quando una persona accede ad una pagina, come si fa a capire in quale lingua vorrebbe visualizzarla? • • • • non si può usando una proprietà di window usando una proprietà di navigator usando proprietà diverse a seconda del browser con cui accede – Come si fa a vedere se la pagina corrente contiene frames? • • • • non si può con window.length con window.frames.length con document.length Bruni e Giorgetti 20 Quiz riassuntivi II – Come si fa a caricare una nuova pagina il cui indirizzo URL è contenuto nella variabile (stringa) go_to? • non si può • • • • window.href = go_to; window.location = go_to; document.location = go_to; window.location.href = go_to; – Come si fa a controllare se la pagina corrente contiene delle immagini? • • • • • non si può con window.length con window.images.length con document.images.length con navigator.images.length Bruni e Giorgetti 21 Esercizi Bruni e Giorgetti 22 Oggetti di secondo livello Oggetti di secondo livello • così come window ha dei sotto-oggetti, anche document ha dei sotto-oggetti che sono quindi di secondo livello – anchor – link – area (non lo useremo) – applet (lo esamineremo meglio in futuro) – plugin (lo esamineremo meglio in futuro) – layer (non lo vediamo, per il momento) – image – form Bruni e Giorgetti 24 Oggetto anchor • testo o immagine della pagina che è target di un link • controparte del tag <a> • elencati in un vettore: document.anchors • generalmente ha scarso rilievo in JS – proprietà: • name: nome dell’ancora • text: testo che compare tra <a> e </a> • x: coordinata X dell’ancora • y: coordinata Y dell’ancora Bruni e Giorgetti 25 Oggetto link • La nascita e lo sviluppo del web sono legati indubbiamente al concetto di link • controparte del tag <a> • elencati in un vettore: document.links • a livello astratto è simile a location – ma in più ha le proprietà: • target: finestra dove verrà aperto il link • text: testo che compare tra <a> e </a> • x: coordinata X dell’ancora • y: coordinata Y dell’ancora Bruni e Giorgetti 26 Oggetto area • Aggiunto a JS1.1 • riferisce le aree “cliccabili” delle mappe immagine • (non lo vediamo in dettaglio) Bruni e Giorgetti 27 Oggetti Applet e Plugin • Aggiunti con JS1.1 • le proprietà di un oggetto applet sono i campi pubblici ed i metodi sono i metodi pubblici della classe • l’oggetto plugin non è supportato da IE – proprietà: description, filename, length, name Bruni e Giorgetti 28 Oggetto image • • • • incapsula ogni immagine del documento controparte del tag <IMG /> elencate in un vettore: document.images favorisce il pre-caricamento nella cache, caricando delle immagini che verranno mostrate solo in seguito (magari in risposta a certi eventi) • permette di “animare” il documento Bruni e Giorgetti 29 image: proprietà fondamentali I new Image(larghezza,altezza) // crea un oggetto immagine con le dimensioni date // se immagine è un oggetto di tipo Image immagine.name // stringa che corrisponde al valore dell’attributo NAME del tag <IMG> (sola lettura) immagine.border // intero che definisce lo spessore del bordo attorno all’immagine (sola lettura) immagine.height // intero che definisce l’altezza dell’immagine (sola lettura) immagine.width // intero che definisce la larghezza dell’immagine (sola lettura) Bruni e Giorgetti 30 image: proprietà fondamentali II immagine.src // stringa che specifica la URL dell’immagine, il cui valore iniziale è dato dall’attributo SRC del tag <IMG> (lettura e scrittura) immagine.lowsrc // come sopra, per l’immagine alternativa immagine.complete // booleano che indica se l’immagine è già stata caricata completamente (sola lettura) Bruni e Giorgetti 31 Immagini: oggetti o tag? • Notare l’analogia tra proprietà e attributi (IE fornisce anche la proprietà alt) • Quante immagini contiene il documento? – document.images.length • Per modificare l’i-esima immagine di un documento? – document.images[i].src = indirizzoURL • Se <IMG NAME=“pippo” … /> come si può accedere all’immagine senza conoscerne l’indice? – document.pippo – (vale anche per le form) Bruni e Giorgetti 32 Oggetto Form • A parte applet Java e controlli ActiveX, l’interazione con l’utente risiede nelle form • controparte del tag <FORM> • l’oggetto form gestisce pulsanti, campi di testo, e tutti gli altri elementi UI come sottooggetti • controlla che l’interazione proceda sempre nella maniera corretta Bruni e Giorgetti 33 form: proprietà fondamentali I // se modulo è un oggetto di tipo Form modulo.name // stringa che corrisponde al valore dell’attributo NAME del tag <FORM> (sola lettura) modulo.elements // array degli elementi che compongono la form (ogni elemento è un opportuno oggetto di terzo livello) modulo.length // numero di elementi che compongono la form (equivalente a modulo.elements.length) Bruni e Giorgetti 34 form: proprietà fondamentali II modulo.action // stringa che specifica l’URL alla quale sarà inviato il modulo, inizializzato dall’attributo ACTION del tag <FORM> modulo.method // “get” oppure “post”, inizializzato dall’attributo METHOD del tag <FORM> modulo.encoding // stringa che specifica il metodo di codifica per l’invio dei dati, inizializzato dall’attributo ENCTYPE del tag <FORM> modulo.target // stringa che specifica il nome del frame o finestra per la ricezione dei risultati, inizializzato dall’attributo TARGET del tag <FORM> Bruni e Giorgetti 35 form: metodi modulo.reset() // riporta tutti i campi di input della form modulo ai valori di default modulo.submit() // invia i dati della form modulo Bruni e Giorgetti 36 Form: oggetti o tag? • Notare l’analogia tra proprietà e attributi • Per accedere all’i-esima form di un documento? – document.forms[i] • Se <FORM NAME=“pippo” … /> come si può accedere alla form senza conoscerne l’indice? – document.pippo – (come per le immagini) • Quanti elementi contiene il modulo pippo? – document.pippo.length Bruni e Giorgetti 37 Quiz riassuntivi – Se il documento contiene 2 immagini, cosa fa il comando document.images[0]=document.images[1]? • provoca un errore • elimina la prima immagine dal documento, lasciando visibile solo l’altra • inverte le due immagini • mostra due volte la seconda immagine – Si possono aumentare dinamicamente gli elementi di una form? • si • no Bruni e Giorgetti 38 Esercizi Bruni e Giorgetti 39 Oggetti di terzo livello Oggetti di terzo livello • Sono tutti sotto-oggetti di form – – – – – – – – – – – button reset submit text password hidden textarea checkbox radio fileUpload select • option (quarto livello) Bruni e Giorgetti 41 Oggetto button • esistono tre tipi di pulsanti: button, reset e submit • ognuno è rappresentato da un tipo oggetto • senza JS, i button generici non servono a molto… ed abbiamo già visto come usarli • NOTA: la larghezza del pulsante è determinata dalla lunghezza del testo nel campo value (si possono aggiungere spazi) Bruni e Giorgetti 42 button: proprietà fondamentali // se pulsante è un oggetto di tipo Button pulsante.form // oggetto di tipo Form cui appartiene il pulsante (sola lettura) pulsante.name // stringa che corrisponde al valore dell’attributo NAME del tag <INPUT/> (sola lettura) pulsante.type // stringa che descrive il tipo del pulsante, corrisponde all’attributo TYPE del tag <INPUT /> (sola lettura) pulsante.value // stringa impressa sul pulsante, corrisponde all’attributo value del tag <INPUT /> (sola lettura) Bruni e Giorgetti 43 Oggetto text • Elemento principale delle form • permette l’inserimento del testo da parte dell’utente • ma serve anche per mostrare risultati dinamicamente! • può essere gestito in maniera da impedire all’utente di modificare il valore mostrato • oggetto password: del tutto analogo Bruni e Giorgetti 44 text: proprietà fondamentali // se campo è un oggetto di tipo Text campo.form // come per Button campo.name // come per Button campo.type // come per Button campo.value // come per Button (in questo caso: testo nella casella), ma aperta anche in scrittura campo.defaultValue // stringa di default nella casella di testo, corrisponde all’attributo VALUE del tag <INPUT /> (sola lettura) Bruni e Giorgetti 45 Oggetto hidden • Come un text la cui visibilità sia settata a false • usato in epoca pre-JS per passare opportuni valori assieme alle form • non possiede metodi • le proprietà sono: – form, name, type e value Bruni e Giorgetti 46 Oggetto textarea • Simile a text, ma permette l’inserimento di più linee di testo • può essere usato per mostrare output all’utente impedendo allo stesso di accedervi per modificarlo • le proprietà sono: – form, name, type, value e defaultValue Bruni e Giorgetti 47 Oggetto checkbox • Tipico elemento di UI di controllo • permette all’utente di specificare un valore di tipo si/no o vero/falso con un “click” • gli elementi con lo stesso nome sono raggruppati in un array Bruni e Giorgetti 48 checkbox: proprietà fondamentali // se scelta è un oggetto di tipo Checkbox scelta.form // come per Text scelta.name // come per Text scelta.type // come per Text scelta.value // come per Text scelta.checked // booleano che indica se la casella è selezionata (lettura e scrittura) scelta.defaultChecked // booleano che indica lo stato di default della checkbox, corrisponde all’attributo CHECKED del tag <INPUT /> (sola lettura) Bruni e Giorgetti 49 Oggetto radio • Analogo a checkbox, ma usato per controlli multipli mutuamente esclusivi • coinvolge più elementi con lo stesso name – ogni elemento è un oggetto – gli elementi con lo stesso nome sono raggruppati in un array Bruni e Giorgetti 50 Oggetto fileupload • Aggiunto con JS1.1 • Del tutto simile ad altri campi di input (es. Text) – in questo caso value e defaultValue indicano i percorsi del file (rispettivamente, selezionato e di default) Bruni e Giorgetti 51 Oggetto select • lista di selezione multipla o a cascata • contiene il sotto-oggetto options (un array di oggetti di tipo Option per le possibili selezioni) – con options si accedono i parametri delle singole opzioni disponibili nella lista • es. se è una lista a selezione multipla, più opzioni potranno essere selezionate contemporaneamente – gli oggetti di tipo Option non hanno metodi, ma solo proprietà Bruni e Giorgetti 52 select: proprietà fondamentali // se scelta è scelta.form // scelta.name // scelta.type // un oggetto di tipo Select come per Text come per Text come per Text scelta.options // array di oggetti di tipo Option che modellano le <OPTION> associate al campo <SELECT> rappresentato da scelta scelta.length // lunghezza dell’array scelta.options (sola lettura) scelta.selectedIndex // indice della prima opzione correntemente selezionata (-1 se nessuna è selezionata) Bruni e Giorgetti 53 option: proprietà fondamentali // se opzione è un oggetto di tipo Option opzione.index // indice di opzione all’interno del vettore options dell’oggetto Select corrispondente opzione.selected // booleano che indica se opzione è attualmente selezionata o meno opzione.defaultSelected // booleano che indica se opzione è selezionata di default o meno, impostato dall’attributo SELECTED del tag <OPTION> opzione.text // stringa che contiene il testo associato all’opzione (il testo semplice, non formattato che segue <OPTION>) opzione.value // valore associato all’opzione, inizializzato dall’attributo VALUE del tag <OPTION> Bruni e Giorgetti 54 Opzioni dinamiche • Gli oggetti Option possono essere creati dinamicamente (col costruttore Option()) – new Option(testo, valore, defsel, sel) • Unico meccanismo dinamico ammesso per quanto riguarda gli elementi di una form (a meno di riscrivere il documento)! Bruni e Giorgetti 55 Esempi: contenuto dinamico I • Vediamo come sfruttare i campi di input per chiedere valori e mostrare risultati – evitiamo l’uso delle finestre di prompt e alert – l’utente può immettere più dati e modificarli prima di avviare il “calcolo” • es. calcolatrice • es. trova e rimpiazza • Esempio: calcolo del totale di una form Bruni e Giorgetti 56 Esempi: contenuto dinamico II <form name=“ordine”> // versione con header <table> <tr><td><input name=“dsc1” type=“text” value=“” /></td> <td><input name=“qnt1” type=“text” value=“0” /></td> <td><input name=“prz1” type=“text” value=“0” /></td></tr> <tr><td><input name=“dsc2” type=“text” value=“” /></td> <td><input name=“qnt2” type=“text” value=“0” /></td> <td><input name=“prz2” type=“text” value=“0” /></td></tr> <tr><td colspan=“2”> <input type=“button” value=“TOTALE” onclick=“totale()” /> </td> <td><input name=“tot” type=“text” value=“0” /></td></tr> </table> </form> Bruni e Giorgetti 57 Esempi: contenuto dinamico III <script type=“text/javascript”> // versione con arrotondamento <!-function totale() { var somma=0; with (document.ordine) { somma += parseInt(qnt1.value) * parseFloat(prz1.value); somma += parseInt(qnt2.value) * parseFloat(prz2.value); tot.value = somma; } } //--> </script> Bruni e Giorgetti 58 Esempi: riconoscere le scelte I • Vediamo come capire quali caselle (radio o checkbox) sono segnate e quali opzioni sono state selezionate (select) – possiamo restringere l’input dell’utente a valori significativi che possiamo subito controllare e sfruttare • Esempio: arricchiamo la form precedente Bruni e Giorgetti 59 Esempi: riconoscere le scelte II <form name=“ordine”> // versione con header <table> <tr><td><input name=“dsc1” type=“text” value=“” /></td> <td><input name=“qnt1” type=“text” value=“0” /></td> <td><input name=“prz1” type=“text” value=“0” /></td></tr> <tr><td><input name=“dsc2” type=“text” value=“” /></td> <td><input name=“qnt2” type=“text” value=“0” /></td> <td><input name=“prz2” type=“text” value=“0” /></td></tr> <tr><td> <input type=“button” value=“TOTALE” onclick=“totale()” /> </td> <td><input name=“sct” type=“radio” value=“10” />10% <input name=“sct” type=“radio” value=“20” />20% <input name=“sct” type=“radio” value=“30” />30%</td> <td><input name=“tot” type=“text” value=“0” /></td></tr> </table> </form> Bruni e Giorgetti 60 Esempi: riconoscere le scelte III <script type=“text/javascript”> // versione con arrotondamento <!-function totale() { var somma=0; with (document.ordine) { somma += parseInt(qnt1.value) * parseFloat(prz1.value); somma += parseInt(qnt2.value) * parseFloat(prz2.value); var sconto = 0; for (i=0 ; i<sct.length ; i++) { if (sct[i].checked) { sconto = sct[i].value; break; } } somma -= (somma*parseInt(sconto))/100 tot.value = somma; } } //--> </script> Bruni e Giorgetti 61 Esempi: riconoscere le scelte IV <form name=“ordine”> // versione con header <table> <tr><td><input name=“dsc1” type=“text” value=“” /></td> <td><input name=“qnt1” type=“text” value=“0” /></td> <td><input name=“prz1” type=“text” value=“0” /></td></tr> <tr><td><input name=“dsc2” type=“text” value=“” /></td> <td><input name=“qnt2” type=“text” value=“0” /></td> <td><input name=“prz2” type=“text” value=“0” /></td></tr> <tr><td> <input type=“button” value=“TOTALE” onclick=“totale()” /> </td> <td><select name=“sct”><option value=“10” selected>10% <option value=“20”>20% <option value=“30”>30%</select></td> <td><input name=“tot” type=“text” value=“0” /></td></tr> </table> </form> Bruni e Giorgetti 62 Esempi: riconoscere le scelte V <script type=“text/javascript”> // versione con arrotondamento <!-function totale() { var somma=0; with (document.ordine) { somma += parseInt(qnt1.value) * parseFloat(prz1.value); somma += parseInt(qnt2.value) * parseFloat(prz2.value); var sconto = sct.options[sct.selectedIndex].value; tot.value = somma; } } //--> </script> Bruni e Giorgetti 63 Quiz riassuntivi I – Qual è l’unico tipo oggetto di quarto livello? • non ve ne sono • • • • • Window Document Form Select Option – Come si fa a cambiare la scritta impressa su un pulsante? • non si può • assegnando il valore alla proprietà name dell’oggetto Button • assegnando il valore alla proprietà value dell’oggetto Button – Come si fa a capire quante opzioni mette a disposizione un oggetto scelta di tipo select? • non si può • con scelta.length • con scelta.options.length Bruni e Giorgetti 64 Esercizi Bruni e Giorgetti 65