8 messaggi dal 08 novembre 2001
In una pagina ASP ho una tabella composta da n righe e 3 colonne; la prima colonna rappresenta una quantità, la seconda rappresenta un valore, mentre la terza rappresenta il prodotto fra le prime due.

Sinteticamente questo è il codice:

....
function CalcolaTotale(Prog)
Set TheForm = Document.ValidForm
TheForm.FormTotale1.value=TheForm.FormQta1.value * TheForm.FormImponibileUnit1.value
end function
....
<FORM NAME="ValidForm" METHOD="POST" ACTION="File.asp">
<tr>
<td>
<INPUT TYPE="TEXT" NAME="FormQta1" SIZE=5 VALUE="5" style="FONT-FAMILY: TAHOMA; FONT-SIZE: 11px;TEXT-ALIGN: right;" onkeyup="CalcolaTotale(1)"></INPUT>
</td><td>
<INPUT TYPE="TEXT" NAME="FormImponibileUnit2" SIZE=10 VALUE="5" style="FONT-FAMILY: TAHOMA; FONT-SIZE: 11px;TEXT-ALIGN: right;" onkeyup="CalcolaTotale(1)"></INPUT>
</td><td>
<INPUT TYPE="TEXT" NAME="FormTotale1" SIZE=10 VALUE="25" style="FONT-FAMILY: TAHOMA; FONT-SIZE: 11px;TEXT-ALIGN: right;" DISABLED></INPUT>
</td></tr>
<tr><td
<INPUT TYPE="TEXT" NAME="FormQta2" SIZE=5 VALUE="2" style="FONT-FAMILY: TAHOMA; FONT-SIZE: 11px;TEXT-ALIGN: right;" onkeyup="CalcolaTotale(2)"></INPUT>
</td><td>
<INPUT TYPE="TEXT" NAME="FormImponibileUnit2" SIZE=10 VALUE="10" style="FONT-FAMILY: TAHOMA; FONT-SIZE: 11px;TEXT-ALIGN: right;" onkeyup="CalcolaTotale(2)"></INPUT>
</td><td>
<INPUT TYPE="TEXT" NAME="FormTotale2" SIZE=10 VALUE="20" style="FONT-FAMILY: TAHOMA; FONT-SIZE: 11px;TEXT-ALIGN: right;" DISABLED></INPUT>
</td></tr>
</FORM>


La funzione così impostata non genera errore, ma funziona solo per la prima riga; e visto che a me servono n righe, non posso creare n funzioni, quindi mi servirebbe una funzione parametrica che utilizzi il numero fornito dal parametro "prog" per lavorare sulla riga che genera l'evento; qualcosa del tipo (non funziona!!):

TheForm.FormTotale & prog & .value=TheForm.FormQta & prog & .value * TheForm.FormImponibileUnit & prog & .value


Grazie a tutti in anticipo.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
in javascript si usa l'operatore + per concatenare le stringhe.
Il metodo che hai suggerito è valido, basta solo una piccola correzione:

eval("TheForm.FormTotale" + prog).value=parseInt(eval("TheForm.FormQta"+ prog).value,10) * parseInt(eval("TheForm.FormImponibileUnit" + prog).value,10)

ho usato eval perchè per creare un riferimento dinamico ai campi non basta concatenare una stringa, bisogna anche valutarla, cioè far intendere al motore javascript che in realtà si tratta di un oggetto.

Il parseInt serve invece per trasformare il .value dei campi in formato numerico che altrimenti verrebbero considerate stringhe.
Forse omettendolo, con le moltiplicazioni funziona lo stesso, ma è sempre meglio esplicitare il tipo di dati.
ciao

Enjoy learning and just keep making
8 messaggi dal 08 novembre 2001
Grazie infinite, ho utilizzato il JavaScript e sono riuscito nel mio scopo.
Per curiosità, che tu sappia è possibile raggiungere lo stesso risultato con VBScript ?
11.886 messaggi dal 09 febbraio 2002
Contributi
si si, la sintassi è molto simile. Cambiano solo:

- l'operatore di concatenazione, che in vbscript è &
- la funzione parseInt, che ha corrispondenza in CInt

eval("TheForm.FormTotale" & prog).value=CInt(eval("TheForm.FormQta" & prog).value) * CInt(eval("TheForm.FormImponibileUnit" & prog).value)

prova, dovrebbe funzionare

Enjoy learning and just keep making
8 messaggi dal 08 novembre 2001
Grazie anche per questo aiuto.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.