Newsgroup: it.comp.lang.javascript
Titolo: mi sembra strano che...

Ciao a tutti,
ho un problema con javascript... sicuramente mi sfugge qualcosa ma non
capisco cosa...  brevemente consideriamo il codice di sotto:
<script language="JavaScript" type="text/JavaScript">
 var tot = 0;
 function prev() {
   tot = new Number(document.form1.Variable.value);
   return tot;
 }
</script>
<form name="form1" method="post" action="">
   <select name="Variable" size="1" id="select3">
       <option value=1>1</option>
       <option value=2>2</option>
       <option value=3>3</option>
   </select>
   <input name="but1" type="button" id="but" onClick="prev()"
value="clicca">
   <script>document.write(tot)</script>
</form>
abbiamo una select con tre voci: 1,2,3... e un button. Lo scopo è
visualizzare il contenuto
della select al click della button... e quindi leggerlo usando una variabile
globale.
se scrivo: document.write(tot) all'interno della function funziona
correttamente, però a me
serve passare il valore fuori dalla function.
Quindi mi aspetto che una volta che eseguo la function prev() con l'evento
onClick sulla button,  la variabile tot, inizialmente inizializzata a 0,
assuma il nuovo valore (ovvero quello nuovo della select) e quindi leggere
il contenuto della variabile tot,
il problema è che non accade... O meglio se premo il button non succede
nulla.
Come bisogna modificare quindi lo script per far si che possa leggere la
variabile tot
correttamente?
Vi ringrazio per la risposta.
Cooper

    <script>document.write(tot)</script>
Questo viene eseguito durante il caricamento, non quando premi il tasto...
Togli il return tot (che non serve a nulla) e mettici un alert(tot),
dovrebbe visualizzare il nuovo valore

 ha scritto nel messaggio
news:avjclq$fsesv$1...@ID-147253.news.dfncis.de...


nella function assegni già il valore alla var globale tot, non serve quindi
restituire alcun valore.
hai messo al termine l'alert di tot?
Quando termina la function hai il valore aggiornato, ovviamente poi devi
capire come e dove utilizzarlo; è ovvio che non visualizza nulla, perché non
gli hai detto di visualizzare nulla da nessuna parte...

 </form>
Ed eccoci al succo. Lo script fa esattamente quel che gli dici di fare.
Ovvero: Inizializzi la variabile tot a 0. Poi gli dici di scriverla sullo
schermo (document.write) e lui ovviamente scrive 0. La pagina ha finito di
caricarsi, scegli il valore dalla select che piu' ti aggrada, clicchi sul
pulsante, e lui assegna tale valore alla variabile tot.
Questo fa, e questo gli hai detto di fare. :) Adesso in tot c'e' il valore
da te scelto, ma non hai scritto da nessuna parte di stamparlo a video.
il document.write viene eseguito solo al caricamento della pagina,
ovviamente. E in nessun altro punto dello script richiami, dopo aver
assegnato il nuovo valore a tot, tale variabile.
Per verificare i cambiamenti, potresti fare:
<input name="but1" type="button" id="but" onClick="prev();alert(tot)"
value="clicca" />
in questo modo, dopo aver avvalorato la variabile tot, gli dici di mostrarla
in una messagebox.
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto:
[Cut]
Ok grazie, perň non hai risposto alla mia domanda, a me interessa
visualizzare il nuovo valore assunto dalla variabile tot dopo il click del
button su una stringa di testo contenuta in <script></script> e interna ai
tag <html></html>, come faccio?
Io ero partito dal presupposto che nel momento in cui l'utente cliccava sul
button, il browser ricaricava la pagina con i nuovi valori... ma a quanto
pare non č cosi... per questo chiedo come dovrei ovviare.. :-)
Personalmente non mi interessa che venga visualizzata in una finestrella...
a livello di test avevo infatti visto che il valore veniva passato.... ma
non nel punto in cui volevo io...
Cooper.

 pare non č cosi... per questo chiedo come dovrei ovviare.. :-)
Allora: Lo script (e tutto cio' che contiene.. valori, funzioni, etc) ha
vita all'interno di una pagina. Se tu cambi pagina, o ricarichi la pagina
stessa, il "ciclo" vitale dello script si azzera e riparte da capo.
Ergo, se il tuo discorso e' cliccare sul button, RICARICARE la pagina e
mostrare il valore cliccato, devi passare tale informazione in un qualche
modo, come se si trattasse di uno scambio di dati tra pagine diverse. Per
fare questo puoi usare, visto che gia' fai uso di form, il metodo GET
(tramite POST non puoi recuperare i dati dal solo script client ma ti serve
tecnologia server side).
Volendo, potresti anche ricaricare la pagina a mano passato il dato nella
querystring (che e' esattamente cio' che fa il GET) in caso non si
trattassero di sole informazioni contenute in elementi di una form.
Un alternatica al passaggio di dati tramite querystring e' passare le
informazioni in un cookies, oppure usare una struttura a frame, ma non mi
pare il caso.
Questo, giusto per spiegarti come eventualmente le cose andrebbero fatte per
seguire la tua "corrente di pensiero" sul fatto di ricaricare la pagina.
Ma in questo preciso caso, non avrebbe alcun senso logico. Difatti non hai
bisogno di ricaricare la pagina.
Basta usare un po' di DHTML. Dati i tuoi discorsi su altri topic, dubito che
ti interessi sapere come realizzare la cosa compatibile con Netscape 4.x,
quindi non sprechero' fiato.
il codice compatibile con i browser piu' recenti (IE5+ NN6+ Mozilla1, etc)
e' il seguente:
function prev() {
    var mysel=document.form1.Variable;
    document.getElementById("myoutput").innerHTML=mysel.options[mysel.selectedIndex].value;
}
<form name="form1" method="post" action="">
   <select name="Variable" size="1" id="select3">
       <option value=1>1</option>
       <option value=2>2</option>
       <option value=3>3</option>
   </select>
   <input name="but1" type="button" id="but" onClick="prev()"
value="clicca">
   <div id="myoutput">0</div>
</form>
A scopo didattico, non ha alcun senso utilizzare la variabile tot globale.
Per quel che deve fare lo script in questione, non ve n'e' alcun bisogno,
ne' tantomeno la conversione da stringa a numero, visto che poi va scritto
come stringa.
Poi, se a te la variabile globale tot serve per qualche altra ragione, puoi
sempre implementarla nuovamente. Il tuo problema credo fosse la mancanza di
questo tipo di conoscenze, adesso puoi divertirti come piu' ti pare e piace
:)


 :)
Vero, ti ringrazio č proprio ciň che cercavo, solo mi rimane una cosa da
capire, hai detto che lo script di cui sopra che hai riscritto č compatibile
con IE5+ NN6+ Mozilla1, etc, io uso la 4.79 eppure al variare della
selezione sulla select il risultato dentro il div rimane costante (sempre
0).
Su explorer invece va a meraviglia e funziona benissimo... dove sbaglio?
Cooper.

 con IE5+ NN6+ Mozilla1, etc, io uso la 4.79
Per "Mozilla1" intendo il browser che fa uso del motore gecko di Netscape
6/7.
Quello a cui ti riferisci te e' (quanto meno l'engine) Netscape 4.x (4.79),
e da quanto avevo capito dai discorsi precedenti, non ti interessava
renderlo compatibile (tant'e' che mi hai risposto anche "si, esatto").
