Nell'esercizio originale, che riporto per primo, si scrivono tre numeri in tre caselle di testo e in una quarta casella di testo si ottiene, regolarmente, la loro somma, usando l'evento onchange.
Ho modificato l'esercizio, riportandolo per secondo, inserendo il tag <fieldset> nel >form> e, di conseguenza, nella funzione tot() ho modificato la riga:
document.modulo.totale.value=totale;
in questa: document.modulo.fieldset1.totale.value=totale;
cioè ho inserito il nome della <fieldset> nella dotnotation, ma nella casella del totale non viene scritto nulla.
Allora ho commentato la riga //document.modulo.fieldset1.totale.value=totale;
e ho provato a raggiungere la casella del totale con le collections:
document.forms[0].elements[4].value=totale;
ma questa volta nella casella del totale viene scritto NaN, eppure la variabile totale è numerica, perché è stata forzata a numerica moltiplicandola per 1.
Desidererei un aiuto per sapere il perché. Grazie
lanvoel
esercizio originale
codice:
<HTML>
<HEAD>
<TITLE>onchange</TITLE>
<SCRIPT TYPE="text/javascript">
//Funzione totalizzatrice dei valori inseriti
function tot()
{
var totale=0;
for(i=0;i<3;i++)
//moltiplicando per 1 si "forza" a numerico
totale+=document.forms[0].elements[i].value*1;
document.modulo.totale.value=totale;
}
function foc()
{
document.modulo.num1.select()
document.modulo.num1.focus()
}
function canc()
{
for(i=0;i<4;i++)
document.forms[0].elements[i].value="";
}
</SCRIPT>
</HEAD>
<BODY>
<H3>FORM. Campo INPUT. Evento onChange</H3><HR>
<FORM NAME="modulo">
1° cifra:<INPUT TYPE="text" NAME="num1" size="10" onChange="tot()" STYLE="text-align: right"><BR>
2° cifra:<INPUT TYPE="text" NAME="num2" size="10" onChange="tot()" STYLE="text-align: right"><BR>
3° cifra:<INPUT TYPE="text" NAME="num3" size="10" onChange="tot()" STYLE="text-align: right"><BR>
Totale:
<INPUT TYPE="text" NAME="totale" SIZE="15" READONLY onFocus="foc()" STYLE="text-align: right">
<INPUT TYPE="button" VALUE="canc" onclick="canc()">
</form>
</FORM>
</BODY>
</HTML>
esercizio modificato
codice:
<HTML>
<HEAD>
<TITLE>onchange</TITLE>
<SCRIPT TYPE="text/javascript">
//Funzione totalizzatrice dei valori inseriti
function tot()
{
var totale=0;
for(i=0;i<3;i++)
//moltiplicando per 0 si "forza" a numerico
totale+=document.forms[0].elements[i].value*1;
//document.modulo.fieldset1.totale.value=totale;
document.forms[0].elements[4].value=totale;
}
function foc()
{
document.modulo.num1.select()
document.modulo.num1.focus()
}
function canc()
{
for(i=0;i<4;i++)
document.forms[0].elements[i].value="";
}
</SCRIPT>
</HEAD>
<BODY>
<center>
<H3>FORM. Campo INPUT. Evento onChange</H3><HR>
<FORM NAME="modulo">
<fieldset name="fieldset1" style="background-color:'cyan'; width:300px; height:160px">
<legend> somma di 3 numeri</legend>
<br>
1° numero:<INPUT TYPE="text" NAME="num1" size="10" onChange="tot()" STYLE="text-align: right"><BR>
2° numero:<INPUT TYPE="text" NAME="num2" size="10" onChange="tot()" STYLE="text-align: right"><BR>
3° numero:<INPUT TYPE="text" NAME="num3" size="10" onChange="tot()" STYLE="text-align: right"><BR>
Totale:
<INPUT TYPE="text" NAME="totale" SIZE="15" READONLY onFocus="foc()" STYLE="text-align: right">
<INPUT TYPE="button" VALUE="canc" onclick="canc()">
</fieldset>
</FORM>
</center>
</BODY>
</HTML>