search
top

Appunti Javascript

Il cookie

è una variabile di memoria localizzata sul client che può essere richiamata successivamente.

Importante è poter scrivere e leggere i cookie rispettivamente:

document.cookie= “miovalore=” + escape(<valore>);

document.cookie richiamato per leggere i cookie mi fornisce tutti i cookie dichiarati nel documento corrente

Per il primo caso non vi è alcun problema in quanto il valore viene registrato nel formato “miovalore=111″,

mentre nel secondo caso occorre “estrarre” il cookie che interessa tramite le funzioni ch

Richiamare oggetti da una finestra all’altra…

Con il comando window.open è possibile da una pagina web richiamare l’apertura di un’altra finestra con all’interno un’altra pagina web.

Inoltre e molto utile a volte poter richiamare valori di campi presenti nella finestra chiamante o viceversa aggiornare i campi della finestra chiamante da quella aperta successivamente.

A tal scopo è molto utile l’oggetto opener.

opener è un riferimento diretto alla finestra chiamante (oggetto window) mediante questo oggetto seguito da il nome del campo presente è possibile recuperarne il valore.

Esempio: una finestra viene aperta in popup (finestra B) quindi appere in primo piano davanti alla finestra principale(finestra A), supponiamo di voler recepire dalla finestra B il valore di un campo presente nella finestra A la sintassi corretta è:

alert(opener.<nome campo>.value);

dove <nome campo> è il nome del campo presente nella finestra chiamante. Interessante è notare come javascript gestisca automaticamente le parentele tra le finestre. in tal modo il codice utilizzato è indipendente dal nome della pagina chiamante che in tal modo viene sempre riferita con opener.

Nel caso in cui nella finestra A il campo è all’interno di un oggetto form è necessario specificare anche il nome della form che lo contiene:

alert(opener.<nome form>.<nome campo>.value);

Trattare le stringhe: supponiamo che dalla pagina corrente a cui sono stati passati n parametri in GET (quindi come parametri presenti dopo il nome della pagina) vogliamo aprire una pagina con diverso nome rispetto alla corrente ma con gli stessi parametri.

Tale occasione può capitare quando si voglia ad esempio passare da una visione tabellare web a una versione della stessa tabella per la stampa che quindi deve rispettare certi parametri e deve avere un’estetica differente.

In tal caso da un pulsante “Stampa” sull’evento onclick del pulsante si può inserire il seguente codice :

“javascript:document.location = chiama_pag() ;”

function chiama_pag() {

rExp = /tabella.asp/gi;

results = window.location.href.replace(rExp, “tabella_stp.asp”) ;

return results

}

nell’esempio tabella.asp è la pagina corrente e tabella_stp.asp è la pagina da aprire per la stampa

Esempio di Chat

questo esempio ci permette di capire il funzionamento di javascript integrato con ASP tramite l’oggetto Microsoft.XMLHTTP da Javascript siamo in grado di attingere alla potenza di ASP.

Prima di tutto la pagina principale della chat è una semplicissima pagina html che contiene due campi di testo e un’area dove andranno a finire i messaggi della nostra chat.

Il codice necessario per tale pagina è il seguente:

<body onload=”startclock();”>

<font face=”verdana” size=3>Chat interna</font>

<form name=myform action=”insert_msg.asp”>

<input type=text name=”nik” value=”"><input type=button value=ok onclick=”f_insert_name(document.myform.nik.value);” ><br>

<textarea name=”messaggi” rows=”10″ cols=”40″ readnonly>

</textarea><br>

<input type=text name=”nuovo_messaggio” size=45>

<input type=button value=Invia onclick=”f_insert_client(document.myform.nuovo_messaggio.value);” >

</form>

Di seguito vediamo il contenuto della funzione javascript startclock() tale funzione fa partire l’evento di aggiornamento della zona della chat relativa ai messaggi, che dev’essere costamente aggiornata, nell’esempio il tempo di aggiornamento è stato impostato a 1000 millesimi di secondo, ma comunque si potrà regolare a piacimento.

function startclock () {

showchat();

}

function showchat () {

str_result=f_result_client(<% =request.querystring(“cod”)%>);

rExp = /<ReturnValue>/gi;

strr = ”;

str_result1=str_result.replace(rExp,strr,str_result) ;

finoa=str_result1.lastIndexOf(“<”) ;

str_result2=str_result1.substr(0,finoa) ;

//alert(document.myform.messaggi.name);

document.myform.messaggi.value = “” ;

document.myform.messaggi.value = str_result2;

timerID = setTimeout(“showchat()”,1000);

timerRunning = true;

}

Come possiamo notare la chiamata alla funzione showchat scatena un’altra chiamata alla funzione f_result_client a cui viene anche passato un codice, vedremo poi che tale codice potrebbe essere utilizzato per creare più gruppi di discussione diversi, ma in questo esempio non ha significato.

function f_result_client(id) {

var DataToSend = “id=” + id

var xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”); //creazione oggetto Microsoft XMLHTTP

xmlhttp.Open(“POST”,”result_client.asp”,false);

xmlhttp.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);

xmlhttp.send(DataToSend);

return xmlhttp.responseXML.xml;

}

Di seguito inserisco il codice relativo alla pagina result_client.asp che restituisce la lista dei messaggi presenti nella tabella della chat.

In pratica se viene chiama la pagina result_client.asp restituisce un pagina contenente:

<ReturnValue>utente1 — Messaggio1[a capo]utente2 — Messaggio2 ecc… </ReturnValue>

Il codice contenuto in tale pagina è il seguente:

<%

codice=request.form(“cod”)

if codice=”" then

codice=request.querystring(“cod”)

end if

strConnAste = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”+ server.MapPath(“mdb-database/chat.mdb”)

Set conn = Server.CreateObject(“ADODB.Connection”)

conn.open strConnAste

set rstConfig = Server.CreateObject(“ADODB.Recordset”)

‘Estraggo solo gli ultimi 10 messaggi pervenuti alla chat

strsql = “select top 10 * from msgs order by id desc”

set rstConfig = conn.Execute(strsql)

do until rstConfig.eof

if rstConfig.eof then

no_msg=true

else

no_msg=false

lista_tot=lista_tot & vbcrlf & rstConfig.fields(1) & ” — ” & rstConfig.fields(2)

end if

rstConfig.movenext

loop

set dataRec = Nothing

Set conn = Nothing

set cm = Nothing

set objConn = Nothing

Response.ContentType = “text/xml”

risultato=lista_tot

Response.write “<ReturnValue>” & risultato & “</ReturnValue>”

%>

L’output di tale pagina è recepito dalla funzione Javascript f_result_client e restituito all’interno della funzione javascript showchat

andando a assegnare il valore alla variabile str_result e successivamente viene “ripulito” dai tag <ReturnValue></ReturnValue> e va a valorizzare il contenuto della TextArea “messaggi” presente all’interno della form “myform”

Cambiamento dinamico classe di stile: In questo esempio si vedrà come modificare lo stile di un campo testuale dinamicamente in base alla validazione della form che lo contiene.

Abbiamo definito due classi stile nel seguente modo:

.Campo_Modulo_rw { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-decoration: none; border-style: outset; background-color: #FFFFFF}

.Campo_Modulo_err { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-decoration: none; border-style: outset; background-color: #FF8080}

Supponiamo di avere una form

<form name=myform action=myaction.asp method=post onSubmit=”return ValidateFrm();”">

<input type=text name=”iniz_str”>

</form>

Il campo normalmente appare con stile definito dalla classe Campo_Modulo_rw

Se ad esempio il campo deve essere obbligatorio nella funzione ValidateFrm() ci sarà la condizione adeguata come sotto:

function ValidateFrm() {

if (document.myform.iniz_str.value == “”)

{

alert(“Campo obbligatorio”);

document.myform.iniz_str.className = “Campo_Modulo_err”;

document.myform.iniz_str.focus();

return false

}

}

Come si può vedere nella parte evidenziata c’è il metodo per cambiare nome della Classe da utilizzare per segnalare l’errore del campo obbligatorio, nell’esempio tale cambio diventa con sfondo rosso.

Inoltre conviene anche portare il cursore sul campo che presenta il problema con il metodo focus().

Aprire una finestra in popup: da una pagina qualsiasi

tramite il seguente comando è possibile aprire una finestra in popup

window.open(“<indirizzo http della pagina da visualizzare>”,”<nome della pagina popup>”,”<caratteristiche estetiche della pagina>”)

dove:

<indirizzo http della pagina da visualizzare>: è l’indirizzo della pagina che si vuole aprire all’interno della pagina popup

<nome della pagina popup>: è il nome che si vuole attribuire alla pagina popup (il broser non apre due pagina popup con lo stesso nome)è il nome che si vuole attribuire alla pagina popup (il broser non apre due pagina popup con lo stesso nome)

<caratteristiche estetiche della pagina>: con questo argomento si possono stabilire le caratteristiche estetiche della pagina popup creata che possono essere:

alwaysLowered impostato a yes crea una finestra di popup sopra le altre finestre

alwaysRaised impostato a yes crea una finestra di popup sotto le altre finestre

channelmode impostato a yes fa apparire la finestra in modalità channel*

dependent impostato a yes, la nuova finestra popup è figlia della finestra chiamante (si chiude quando la finestra padre viene chiusa e non appare nella task bar di Windows)

directories impostato a yes la nuova finestra ha i pulsanti standard delle directory

fullscreen la nuova finestra appare in full screen

height è il valore in pixel che avrà la nuova finestra

hotkeys Quando è impostato a no, questo disabilita l’uso dei tasti hotkeys in una finestra window senza la barra dei menù

innerHeight Serve per impostare il valore di inner height della finestra in pixel

innerWidth Serve per impostare il valore di inner width della finestra in pixel

left Come screenX permette di impostare la distanza dalla parte sinistra dello schermo in pixel.

location Quando è impostato a yes crea una finestra con la barra degli indirizzi altrimenti non appare la barra degli indirizzi

menubar Quando è impostato a yes crea una nuova finestra con i menu standard (File, Edit, View, etc.).

outerHeight Questo imposta il valore in pixel di outer height

outerWidth Questo imposta il valore in pixel di outer width

resizable When set to yes this allows the resizing of the new window by the user.

screenX This allows a new window to be created at a specified number of pixels from the left side of the screen.

screenY This allows a new window to be created at a specified number of pixels from the top of the screen.

scrollbars Quando è impostato a yes la nuova finestra viene visualizzata con le barre di scorrimento standard (orizzontale e verticale) quando è necessario

status Impostato a yes nella nuova finestra appare la barra di stato standard del browser

titlebar Impostato a yes la nuova finestra avrà la barra del titolo standard del browser

toolbar Impostato a yes la nuova finestra avrà la barra degli strumenti standard (Precedente, Successiva, Home ecc.)

top Simile alla proprietà screenY, consente di creare la nuova finestra ad un nuomero specificato di pixel dalla parte alta dello schermo

width Porprietà che imposta la larghezza della nuova finestra in pixel

z-lock Quando è impostato su yes non consente alla nuova finestra di apparire sopra le altre finestre quando assume la attivazione

tipicamente tale comando si utilizza da un tag onclick su un oggetto presente sulla pagina di partenza: ad esempio nel caso si voglia aprire in una finestra esterna di help partendo da un tag help presente sulla pagina:

<a href=”#” onclick=”window.open(‘miapagina.asp’,'pagina_help’,'width=250,height=300”)>help</a>

Esempio:

<a href=”#” onclick=”window.open(‘http://….help.asp’,'Aiuto’,'height=500; width=450; menubar=no;’)”>help</a>

Note relative alla meta-sintassi utilizzata:

nel testo ho rappresentato le variabili che possono di volta in volta essere utilizzate

con gli oggetti presenti nello specifico ambiente in cui si utilizza il comando con la notazione <denominazione> tale

sintassi è abbastanza chiarificatrice in quanto all’interno delle parentesi “acute” ho utilizzato delle denominazioni “parlanti” in modo da rendere più compresibile la lettura.

top