Archivi tag: campi generati dinamicamente

PHP e Javascript: somma automatica su campi generati dinamicamente

Recentemente mi è capitato di dover calcolare automaticamente la somma dei valori contenuti all’interno di campi di input generati dinamicamente. Per fare ciò mi sono servito di un pò di codice Javascrip intervallato a codice PHP. Eccone uno stralcio:

<?php if(isset($count))
{
?>
function startCalc(){
interval = setInterval("calc()",1);
}
function calc(){
var array = new Array(<?php echo $count ?>);
var sum = 0;
<?php
for($i=1; $i<=$count; $i++)
{
?>
var valore<?php echo $i ?> = document.tariffe.subtotaletariffa<?php echo $i ?>.value;
<?php
}
for($i=1; $i<=$count; $i++)
{
?>
array[<?php echo $i ?>] = (valore<?php echo $i ?> * 1);
sum += array[<?php echo $i ?>];
<?php
}
?>
document.tariffe.totale.value = Math.round(sum*100)/100; <!--arrotondo alla seconda cifra decimale -->
}
function stopCalc(){
clearInterval(interval);
}

Per prima cosa memorizzo all’interno della variabile $count il numero di campi di input da stampare a video. Successivamente dichiaro un array dimensionato proprio in base a $count. Non mi resta quindi che calcolare la somma dei valori contenuti nei vari campi di input e successivamente reindirizzarli all’interno del campo “totale”. Il codice HTML (intervallato ad altro codice PHP) è il seguente:

<?php
if(isset($_POST['continua']));
{
$i = 1;
$j = 1;
while(@$riga = $risultato_tariffe->fetch_assoc())
{
?>
<label for="tariffa<?php echo $i?>">
<select name="tariffa<?php echo $i?>" tabindex="<?php echo $j?>" id="tariffa"> Tariffa: (*)    
<option><?php echo $riga['Nome']?></option>
</select>
</label>
<label for="numpastariffa<?php echo $i?>">
<input type="text" name="numpastariffa<?php echo $i?>" tabindex="<?php echo $j+1?>" id="numpastariffa<?php echo $i?>" onFocus="startCalc2();" onBlur="stopCalc2();" />numero passeggeri per tariffa: (*)
</label>
<label for="importo<?php echo $i?>">
<input type="text" name="importo<?php echo $i?>" tabindex="<?php echo $j+2?>" id="importo<?php echo $i?>" onFocus="startCalc3();" onBlur="stopCalc3();" />importo: (*)
</label>
<label for="subtotaletariffa<?php echo $i?>">
<input type="text" name="subtotaletariffa<?php echo $i?>" tabindex="<?php $j=$j+3; echo $j?>" id="subtotaletariffa<?php echo $i?>" onFocus="startCalc();" onBlur="stopCalc();" />subtotale tariffa: (*)
</label>
<?php
$i++;
$j++;
}
$risultato_tariffe->);
}
?>

dove la variabile $i viene utilizzata per assegnare il nome ai vari campi, mentre $j è una semplice variabile di appoggio utilizzata nell’ambito dei tabindex. Per uteriori chiarimenti contattatemi. A presto.