Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Calcoli in automatico

  1. #1
    Utente di HTML.it L'avatar di orcim
    Registrato dal
    May 2003
    Messaggi
    1,692

    Calcoli in automatico

    Ciao.

    Sto cercando di far funzionare questo script, che dovrebbe restituire nel campo chiamato CostoTot la somma del campo Costo più l' IVA:
    codice:
    <html>
     
    <head>
     
    <script>
    function format(number, dec) {
        
        
        while (number.length < dec + 1)  
            number = "0" + number;
        
        var formatted = "";
        var decimal  = new RegExp ("(\\d*?)(\\d{" + dec +"})$");
        var fixed    = new RegExp ("(\\d*?)(\\d{3})$");
         
        split = decimal.exec(number);
        
        if (split[2].length > 0) {
            formatted = "," + split[2];
        }
        number = split[1];
         
        while (number.length > 3) {
          split = fixed.exec(number);
          formatted = "." + split[2] + formatted;
          number = split[1];
        }
        
        formatted = number + formatted;
        return formatted;
     
    }
    </script>
     
    <script language="javascript">
    function calcola() {
       var imp = parseFloat(document.frm.Costo.value, 10);
       var iva = imp * 0.2;
       var tot = imp + iva;
     
       document.getElementById('Costo').value = format((imp*100), 2);
       document.getElementById('IVA').value = format((iva*100), 2);
       document.getElementById('CostoTot').value = format((tot*100), 2);
     
    }
    </script>
     
    </head>
     
    <body>
     
              <form method="POST" name="frm" action="page.asp">
     
            <input type="text" name="Costo" size="5">
            <input type="text" name="IVA" size="5">
            <input type="text" name="CostoTot" size="5" onChange="calcola();">
     
     </form>
    </body>
     
    </html>
    nel form non succede nulla, cioè il campo CostoTot rimane vuoto.

    Dove sbaglio ???

    P.S.: Lo script prevede un'imposta fissa dell'IVA pari al 20%, ma se l'imposta fosse differente come modifico il codice ????

    Grazie.
    "Ubi Maior, Minor Cessat"
    Domandare è lecito, rispondere è cortesia...
    A tutti è dovuta una risposta, comunque...

    “Dio gradisce molto di più le bestemmie dell’uomo disperato che non le lodi del benpensante la domenica mattina durante il culto“ Martin Lutero

  2. #2
    Prima cosa,
    se richiami un valore tramite ID devi definire l'ID nei campi text. Poi se non ho capito male inserendo i valori nel primo campo si calcolano gli altri di conseguenza, quindi l'onchange lo devi mettere nel primo campo text. Per quano riguarda l'iva puoi passarla come parametro alla funzione calcola() oppure imposti un altro campo text in cui inserisci il valore e lo leggi dalla funzione.

    p.s. ho provato la pagina che hai postato e la funzione che formatta la valuta mi pare abbia un comportamento un po' anomalo, in caso prova questa (non occorre che arrotondi):
    codice:
    function formatValue( arg ) {
    /*********************************************************/
    				
    	if (isNaN(arg) || parseFloat(arg)==0)  return '0,00'
    				
    	var sign = arg<0 ? '-' : ''
    	var tmp = ( Math.round(Math.abs(parseFloat(arg))*100) ).toString()
    	var len = tmp.length-2
    	var decimal = tmp.substr(tmp.length-2)
    
    	tmp = tmp.substr( 0,tmp.length-2 )
    	var valute=''
    	var dot = ''
    					
    		for (var i=1,c=Math.ceil(len/3); i<c; i++){
    			valute=tmp.substr(len-i*3,3)+dot+valute
    			dot='.'
    			}
    	valute=sign+(len>0?tmp.substr(0,(len%3?len%3:3)):'0')+dot+valute+','+decimal
    	return valute
    }
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.