Newsgroup: it.comp.www.homepages
Titolo: Perche' non funziona?

Com'e' che il seguente script mi da' errore? Non riesco a far
passare il valore dal modulo alla funzione ParseInt. La cosa
piu' strana e' che document.write mi stampa il valore dato da
document.numero.NumeroPotenze.value senza problemi, ma poi
fa le bizze quando cerco di assegnare questo stesso valore ad
una variabile! Quale puo' essere il problema?
Grazie,
        Marco
<HTML> <HEAD> <TITLE>Place your title here</TITLE> </HEAD> <BODY>
<H5>Inserire il numero di potenze di 2 che si desidera sommare e premere
Invio.</H5> <P> <FORM NAME="numero" ONSUBMIT="Result();"> <INPUT TYPE="text"
size=4 NAME="NumeroPotenze"> <P> <INPUT TYPE="button" VALUE="Invio"
OnClick="Result();"> <P> </FORM> <SCRIPT> <!-- function Result() { 
document.write("numero potenze = "+document.numero.NumeroPotenze.value);  //
non riesco a far passare il valore NumeroPotenze a  // n : mi da' come
errore: "document.numero.NumeroPotenze is not an object"  // non capisco
perche'. Eppure dovrebbe essere un oggetto! La cosa piu'  // strana e' che
nella riga qui sopra non mi da' problemi a scrivere questo valore,  // ma si
blocca solo quando cerco di fare il parseInt.  var p=1;  var a=2; 
n=parseInt(document.numero.NumeroPotenze.value);  if (n>=0)  {	for
(x=1;x<=(n-1);x++) {  p=p+a;  a=a*2;  }  document.write("somma di prime "+n+"
potenze di 2 = "+p);  } } --> </SCRIPT>
</BODY>
</HTML>
-----== Posted via Deja News, The Leader in Internet Discussion ==-----
http://www.dejanews.com/rg_mkgrp.xp
   Create Your Own Free Member Forum

 una variabile! Quale puo' essere il problema?
Il problema è semplice:
per quale mai motivo usi la funzione document.write? Dove credi che debba poter
scrivere il povero browser se non gli apri un documento? Javascript non permette
di aggiungere testo ad un documento che ha già caricato! A caricarne uno nuovo
(magari con i tuoi calcoli) sì, ma a modificare l'esistente proprio no. Il fatto
che la prima volta a te funzioni dipende solo da errori di versione del tuo
browser: il mio Netscape 4.03 si rifiuta categoricamente.
Prova a sostituire document.write con alert (tecnica che ti consiglio di usare
largamente per il debug!) e vedrai che quello che hai scritto funziona benissimo.
Per riportare i dati sul tuo foglio già caricato l'unica è ficcargli un bel campo
text e modificarne il valore con i tuoi risultati. Vedi esempio.
Non si capisce perché Netscape o Explorer rispondano con cose così stupide.
Messaggi di errore riguardanti non il comando che l'ha bloccato, ma un qualsiasi
altro oggetto che gli capita a tiro! Non si capisce proprio da dove li prende!
E questo è solo l'inizio... come vedi le varianti dovute alle versioni sono
notevoli e confuse...
Bene, hai imparato una cosa assai utile in Javascript: non fidarti MAI dei
messaggi di errore, sappi che se compaiono, l'errore è altrove. Morale: fai le
cose fatte bene (ovvero cerca di evitare di fare errori, consiglio banale ma
doveroso, perdonami) e usa gli alert ogni riga per vedere cosa sta succedendo, è
l'unico modo per sapere che e quali variabili e come sono state assegnate.
Io di solito consiglio di scrivere una riga per volta ai miei allievi... e, come
quel film famoso, "provare, provare, provare, provare..."
ciao
Stefano
<HTML> <HEAD> <TITLE>Place your title here</TITLE> </HEAD> <BODY>
<H5>Inserire il numero di potenze di 2 che si desidera sommare e premere
Invio.</H5> <P>
<FORM NAME="numero" >
<INPUT type="Text" name="NumeroPotenze" size="4">
<INPUT TYPE="button" VALUE="Invio" Onclick="Result()"> <p>
<input type="Text" name="risultato" value="Chissà mai cosa sarà..." size="50">
<P>
</FORM>
<script language="javascript">
function Result() {
alert("numero potenze = "+document.numero.NumeroPotenze.value);
var p=1;  var a=2;
n=parseInt(document.numero.NumeroPotenze.value);
if (n>=0)  {  for (x=1;x<=(n-1);x++) {  p=p+a;  a=a*2;  }
document.numero.risultato.value="somma di prime "+n+" potenze di 2 = "+p;  } }
</SCRIPT>
</BODY>
</HTML>

 largamente per il debug!) e vedrai che quello che hai scritto funziona
benissimo.
Grazie mille per le informazioni. Adesso
ho tolto il document.write e la pagina
funziona, pero' solo su Internet Explorer!
Quando provo a vederla con Netscape non
da' nessun risultato, nemmeno dopo aver
messo lo script nell' header (a Netscape
non piace quando lo metti nel body come
commento). Quale puo' essere la causa?
Ho lo stesso problema anche con un altro
file HTML, che deve visualizzare una
semplice tabella. Su IE gira senza problemi,
su Netscape la tabella non appare.
Includo tutti e due i files.
Ciao e grazie,
               Marco
<HTML>
<HEAD>
<TITLE>Somma Potenze</TITLE>
<SCRIPT>
<!--
function Result() {
   var n = document.numero.potenze.value;
   var p = 1;
   var a = 2;
   if (n>=0) {
     for (x=1;x<=(n-1);x++) {
       p=p+a;
       a=a*2;
     }
     document.write("somma di prime "+n+" potenze di 2 = "+p);
   }
}
-->
</SCRIPT>
</HEAD>
<BODY>
<H5>Inserire il numero di potenze di 2 che si desidera sommare e premere
Invio.</H5>
<P>
<FORM NAME="numero" ONSUBMIT="Result();">
<INPUT TYPE="text" size=4 NAME="potenze">
<P>
<INPUT TYPE="button" VALUE="Invio" OnClick="Result();">
<P>
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Conversioni Valute</TITLE>
</HEAD>
<BODY BGCOLOR=#EEEEEE TEXT=#000090>
<H2 ALIGN=CENTER>Cambi valute (16/9/98)</H2></FONT>
<TABLE BORDER=2 CELLPADDING="7" ALIGN=CENTER>
<SCRIPT>
document.write("<TR ALIGN=CENTER><TD>Lire</TD>");
document.write("<TD>Dollari</TD>");
document.write("<TD>Sterline</TD><TD>DM</TD></TR>");
for(x=1000; x<=10000; x=x+1000){
   document.write ("<TR ALIGN=RIGHT><TD>"+x+"</TD>");
   document.write ("<TD>"+x*1676.26+"</TD>");
   document.write ("<TD>"+x*2806.56+"</TD>");
   document.write ("<TD>"+x*987.78+"</TD></TR>");
