Calcolare e formattare con javascript [Form!]

ClouDClauS

Nuovo Utente
14 Ago 2012
8
0
0
Ciao ragazzi ho questo form che mi sta facendo mandare ai pazzi, devo far si che il totale venga calcolato il base all'oggetto spuntato per il valore inserito nel campo grammi, il problema è che gli input da spuntare hanno un valore dinamico che viene aggiornato via csv e dopo deve subire un ulteriore moltiplicazione, credo di aver fatto tutti i passaggi possibili non capisco ma il form non esegue il calcolo... non riesco a capire dove è l'errore aiutatemi voi :crying:

Codice:
<html>
<head>
<script type="text/javascript">
function processForm() {
//get form variables
var theItems = document.getElementsByName( "item" );
var theQty = Number( document.getElementById( "qty" ).value );
var thePrice = Number( document.getElementById( "price" ).value);

//variable for selected item
var selectedItem;

//variable for order total
var orderTotal = 0.00;

//the display box
var outBox = document.getElementById( "total" );

//set selectedItem = checked item
for(var i = 0; i < theItems.length; i++) {
if( theItems[i].checked) {
selectedItem = theItems[i].value;
break;
}
}

//get price for selected item
switch(selectedItem) {
case "A":
total = thePrice * 0.916;
break;
case "B":
total = thePrice * 0.999;
break;
default:
total = 0.00;
}

//figure final total
total = (selectedItem * theQty);

//output to text box
outBox.value = "€ " + total.toString();
}
</script>
</head>
<body>
 <?php
        $remoteFileAddr = "http://dodygold1.altervista.org/csv/oro.csv";
        // apri il file in lettura
        $fr = fopen($remoteFileAddr, 'r');
        // crei un arrary che conterra le righe
        $righe = array();
        // cicli il file
        while (!feof($fr)) {
            // riempi l'array
            $righe[] = fgets($fr);
        }

        // a te interessa il secondo elemento che contiene il numero quindi $righe[1]
        echo <<< FORM
<form id="form1" action="" method="get">
22KT <input type="radio" name="item" value="A" /> 24KT <input type="radio" name="item" value="B" /><br>
Valore del Fixing di Londra -0.40cent<br>
<input type="text" id="price" size="20" maxlength="20" readonly="readonly" value="{$righe[1]}" /><br>
Peso in Grammi: <input type="text" id="qty" size="10" maxlength="10" value="1" /><br>

Totale: <input type="text" id="total" size="20" maxlength="20" readonly="readonly" value="0.00" /><br>
<input type="button" id="submit" value="Calcola il Totale" onclick="processForm()" />
</form>
FORM;
        ?>
</body>
</html>
 
Ciao,
molto piu semplice di quello che pensi
HTML:
<script type="text/javascript">
            function processForm() {
                // recuperi il prezzo
                var price = document.getElementById('price').value;
                // recuperi la quantita
                var qta = document.getElementById('qty').value;
                // moltiplichi
                var totale = price * qta;
                // mostri
                document.getElementById('total').value = totale;
            }
        </script>
nella discussione su php nelle note ti ho scritto di usare il punto per facilitare i calcoli

PS: cerca di usare titoli piu specifici per facilitare la ricerca aglialtri utenti
 
Ultima modifica:
Ciao Criric,
Intanto grazie mille dell'infinita disponibilità. Ora il form esegue tutti i calcoli precisamente l'unica cosa quando io seleziono gli input radio con nome "Item" e valute rispettivamente A e B deve eseguire due calcoli distinti per la value A ( price * 0.916 * qty) mentre per B ( price * 0.999 * qty) sto provando a lavorarci in base ai preziosi consigli che mi stai dando ma se ha qualcosa da suggerirmi ben venga :D ! se vuoi dare uno sguardo al form: http://dodygold1.altervista.org/csv/PROVA.PHP


Ciao,
molto piu semplice di quello che pensi
HTML:
<script type="text/javascript">
            function processForm() {
                // recuperi il prezzo
                var price = document.getElementById('price').value;
                // recuperi la quantita
                var qta = document.getElementById('qty').value;
                // moltiplichi
                var totale = price * qta;
                // mostri
                document.getElementById('total').value = totale;
            }
        </script>
nella discussione su php nelle note ti ho scritto di usare il punto per facilitare i calcoli

PS: cerca di usare titoli piu specifici per facilitare la ricerca aglialtri utenti
 
Risolto creando due pagine separate, avrei bisogno di un ultimo piccolo aiuto per caso ce un modo per far si che il totale fosse mostrato con due decimali effettuando un arrotondamento per eccesso o per difetto?

Ciao Criric,
Intanto grazie mille dell'infinita disponibilità. Ora il form esegue tutti i calcoli precisamente l'unica cosa quando io seleziono gli input radio con nome "Item" e valute rispettivamente A e B deve eseguire due calcoli distinti per la value A ( price * 0.916 * qty) mentre per B ( price * 0.999 * qty) sto provando a lavorarci in base ai preziosi consigli che mi stai dando ma se ha qualcosa da suggerirmi ben venga :D ! se vuoi dare uno sguardo al form: http://dodygold1.altervista.org/csv/PROVA.PHP
 

Grazie mille, risolto anche questo!
Sto impazzendo da un paio di giorni su un fattore, vorrei che il totale venga formattato in questo modo 1.000.000,00
Ma su internet le funzioni che ho trovato sbagliano nei decimali, qualcuno di voi ha qualcosa di pronto o qualche idea da consigliarmi ?
Grazie ancora.
 
Ne ho trovata una che simula il number_format() di php a questo indirizzo
Sembra valida
Esempio:
Codice:
<script>
    function number_format (number, decimals, dec_point, thousands_sep) {
        
        number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
        var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);            return '' + Math.round(n * k) / k;
        };
        // Fix for IE parseFloat(0.55).toFixed(0) = 0;
        s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
        if (s[0].length > 3) {        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
        }
        if ((s[1] || '').length < prec) {
            s[1] = s[1] || '';
            s[1] += new Array(prec - s[1].length + 1).join('0');    }
        return s.join(dec);
    }
    
    alert(number_format(1000000.56, 2, ',', '.'))
</script>

PS: cambio il titolo della discussione
 
Ultima modifica:

Discussioni simili