Se ho capito bene il problema una soluzione potrebbe essere questa:
nella creazione della tabella (fatta all'interno della fetch del resultset restituito dalla query)
dovrai crearti, per ogni riga, degli oggetti input di tipo text che saranno sostanzialmente 3 (per ogni riga)
uno per la quantità, uno per l'importo unitario e uno per il totale parziale
dovrai assegnare a questi oggetti un nome composto da una stringa fissa e un numero che identifica il numero di riga
es: quantitaXX, importoXX, parzialeXX
per fare questo basta usare un indice che imposterai a 0 prima del ciclo di fetch
es:
$i = 0;
all'interno del ciclo gli oggetti li costruirai così:
<input type="text" name="quantita<? echo $i ?>" value="0" onchange="javascript:quantitaChange('<? echo $i ?>');" />
<input type="text" name="importo<? echo $i ?>" value="<? echo $row->XXX; ?>" readonly />
<input type="text" name="parziale<? echo $i ?>" value="0" readonly />
e naturalmente incrementerai $i
p.s. l'importo e il parziale sono readonly perché chiaramente non sono modificabili a mano ma vengono calcolati via js
dopo il ciclo di fetch aggiungerai gli oggetti:
<input type="text" name="iva" value="[valoredidefault]" /> e <input type="text" name="totale" value="0" readonly />
a questo punto ti serve solo la funzione javascript quantitaChange che fa i calcoli:
function quantitaChange(indice)
{
var quantita = 0;
var importo = 0;
var parziale = 0;
var qtname = "documenti.nomeform.quantita" + indice;
var qtobj = eval(qtname);
var impname = "documenti.nomeform.importo" + indice;
var impobj = eval(impname);
var parzname = "documenti.nomeform.parziale" + indice;
var parzobj = eval(parzname);
if (qtobj) // Se l'indice è corretto e l'oggetto esiste
{
quantita = qtobj.value;
importo = impname.value;
parziale = quantita * importo;
parzobj.value = parziale;
calcTotale();
}
}
function calcTotale()
{
var i = 0;
var tot = 0;
var iva = 0;
var parzname = "document.nomeform.parziale0";
var parzobj = eval(parzname);
var ivaname = "documenti.nomeform.iva";
var ivaobj = eval(ivaname);
var totname = "documenti.nomeform.totale";
var totobj = eval(totname);
iva = ivaobj.value;
while (parzobj)
{
tot = tot + parzobj.value;
i = i + 1;
parzname = "document.nomeform.parziale" + i;
parzobj = eval(parzname);
}
if (tot > 0)
{
if (iva > 0)
tot = tot + ((tot / 100) * iva);
totobj.value = tot;
}
}
Non l'ho provato ed è un po di tempo che non scrivo javascript quindi non so se è tutto corretto
Prova
"Vuoi rendere impossibile per chiunque opprimere un suo simile? Allora, assicurati che nessuno possa possedere il Potere."
- M. Bakunin -