Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di viki1967
    Registrato dal
    Feb 2003
    Messaggi
    1,757

    Problema con calcoli automatici in javascript

    ciao, "chi lavora.. sbaglia" si dice dalle mie parti...

    ebbene il problema è il seguente:

    ho previsto un campo 'quantità' nel form dove va inserito il numero dei prodotti da fatturare...

    se il numero del prodotto è uno va bene, ma se metto più di 1, nel campo 'finale1' ho sempre il prezzo singolo, esempio:

    quantità (quantità1)= 1
    prezzo (prezzo1) = 10
    importo (finale1) = 10 ok

    quantità (quantità1)= 2
    prezzo (prezzo1) = 10
    importo (finale1) = 10 ??? (dovrebbe essere 20... )

    grazie per l'aiuto

    codice:
    <script language=javascript>
    <!-- 
    
    function trasforma(f, index)
    { 
     f = document[f];  
     
    q = parseFloat("0" + f.prezzo[index].value);  
    s = parseFloat("0" + f.sconto[index].value);   
    
    f.finale[index].value = Math.round(q * (100 - s)) / 100;   
    
    // Ricalcola il gran Totale, itera i 15 campi 'finale'  
    
    var sum = 0.0; 
    
    for ( n = 0 ; n < 15 ; n++)   
    
     {  
    
        sum += parseFloat("0" + f.finale[n].value);  
    
      }  
    
     f.totale.value = sum;
    
    }
    
     //-->
    
    </script> 
    
    <input name="prezzo1" type="text" id="prezzo" size="8">  
    <input name="sconto1" type="text" id="sconto" onBlur="trasforma('form1', 0)" size="8">  
    <input name="finale1" type="text" id="finale" size="8">

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    codice:
    <script language=javascript>
    <!-- 
    
    function trasforma(f, index)
    { 
     f = document.forms[f];  
     
    q = parseFloat("0" + f.elements["prezzo"+index].value);  
    s = parseFloat("0" + f.elements["sconto"+index].value);   
    
    f.elements["finale"+index].value = Math.round(q * (100 - s)) / 100;   
    
    // Ricalcola il gran Totale, itera i 15 campi 'finale'  
    
    var sum = 0.0; 
    
    for ( n = 0 ; n < 15 ; n++)   
    
     {  
    
        sum += parseFloat("0" + f.elements["finale"+n].value);  
    
      }  
    
     f.totale.value = sum;
    
    }
    
     //-->
    
    </script> 
    
    <input name="prezzo1" type="text" id="prezzo" size="8">  
    <input name="sconto1" type="text" id="sconto" onBlur="trasforma('form1', 0)" size="8">  
    <input name="finale1" type="text" id="finale" size="8">
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it L'avatar di viki1967
    Registrato dal
    Feb 2003
    Messaggi
    1,757
    grazie, ma restituisce questo errore:

    codice:
    Riga: 14
    Carattere: 1
    Errore: 'elements[...]. value' è nullo o non è un oggetto

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    <input name="sconto1" type="text" id="sconto" onBlur="trasforma('form1', 1)" size="8">

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it L'avatar di viki1967
    Registrato dal
    Feb 2003
    Messaggi
    1,757
    Originariamente inviato da br1
    <input name="sconto1" type="text" id="sconto" onBlur="trasforma('form1', 1)" size="8">
    scusami ma non cambia nulla...:

    codice:
    <input type="text" name="quantita1" size="20">
    <input name="prezzo1" type="text" id="prezzo" size="8">  
    <input name="sconto1" type="text" id="sconto" onBlur="trasforma('form1', 1)" size="8">  
    <input name="finale1" type="text" id="finale" size="8">
    lo stesso errore di prima, ma alla riga 27

  6. #6
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao tutti,


    br1 mica può sapere com'è fatto il tuo form

    tu fai un ciclo da 0 a 14
    codice:
    for ( n = 0 ; n < 15 ; n++)
      sum += parseFloat("0" + f.elements["finale"+n].value);
    hai i campi finale0, finale1,.... finale14?

    casomai posta tutto il form

  7. #7
    Utente di HTML.it L'avatar di viki1967
    Registrato dal
    Feb 2003
    Messaggi
    1,757
    posto tutto il form :

    codice:
    <script language=javascript>
    <!-- 
    
    function trasforma(f, index)
    { 
     f = document.forms[f];  
     
    q = parseFloat("0" + f.elements["prezzo"+index].value);  
    s = parseFloat("0" + f.elements["sconto"+index].value);   
    
    f.elements["finale"+index].value = Math.round(q * (100 - s)) / 100;   
    
    // Ricalcola il gran Totale, itera i 15 campi 'finale'  
    
    var sum = 0.0; 
    
    for ( n = 0 ; n < 16 ; n++)   
    
     {  
    
        sum += parseFloat("0" + f.elements["finale"+n].value);  
    
      }  
    
     f.totale.value = sum;
    
    }
    
     //-->
    
    </script>
    
    <input type="text" name="quantita1" size="20">
    <input name="prezzo1" type="text" id="prezzo" size="8">  
    <input name="sconto1" type="text" id="sconto" onBlur="trasforma('form1', 1)" size="8">  
    <input name="finale1" type="text" id="finale" size="8">
    il campi del form si ripetono progressivamente sino a:

    codice:
    <input type="text" name="quantita16" size="20">
    <input name="prezzo16" type="text" id="prezzo" size="8">  
    <input name="sconto16" type="text" id="sconto" onBlur="trasforma('form1', 1)" size="8">  
    <input name="finale16" type="text" id="finale" size="8">

  8. #8
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    se i campi vanno da 1 a 16 il ciclo devi farlo così
    codice:
    for ( n = 1 ; n <= 16 ; n++)
    i campi
    codice:
    <input type="text" name="quantita1" size="20">
    <input name="prezzo1" type="text" id="prezzo" size="8">  
    <input name="sconto1" type="text" id="sconto" onBlur="trasforma('form1', 1)" size="8">  
    <input name="finale1" type="text" id="finale" size="8">
    fino a 16 (anche nella funzione)
    codice:
    <input type="text" name="quantita16" size="20">
    <input name="prezzo16" type="text" id="prezzo" size="8">  
    <input name="sconto16" type="text" id="sconto" onBlur="trasforma('form1', 16)" size="8">  
    <input name="finale16" type="text" id="finale" size="8">

  9. #9
    Utente di HTML.it L'avatar di viki1967
    Registrato dal
    Feb 2003
    Messaggi
    1,757
    non va più in errore ma ritorniamo al quesito iniziale:

    quantità (quantità1)= 1
    prezzo (prezzo1) = 10
    importo (finale1) = 10 ok

    quantità (quantità1)= 2
    prezzo (prezzo1) = 10
    importo (finale1) = 10 ??? (dovrebbe essere 20... )

  10. #10
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    beh... nello script non usi mai la quantità.

    mi sono permesso di rifarti la funzione
    codice:
    function aggiornaCalcoli(obj){
      var ff = obj.form
      var re = /[^\d]/g
      var indice = parseInt(obj.name.replace(re,''),10)
      var quantita = parseInt(ff.elements['quantita'+indice].value,10)
      if(isNaN(quantita))quantita=0
      var prezzo = parseFloat(ff.elements['prezzo'+indice].value)
      if(isNaN(prezzo))prezzo=0
      var sconto = parseFloat(ff.elements['sconto'+indice].value)
      if(isNaN(sconto))sconto=0
      ff.elements['finale'+indice].value = (prezzo-(prezzo/100)*sconto)*quantita
      var sum = 0.0
      var finale
      for(i=1;i<=16;i++){
        finale = parseFloat(ff.elements['finale'+i].value)
        if(isNaN(finale))finale=0
        sum+=finale
      }
      ff.totale.value=sum	
    }
    da richiamare all'onchange di tutti i text (tranne dei finale e totale)
    codice:
    <input type="text" name="quantita1" size="20" onchange="aggiornaCalcoli(this)">
    <input name="prezzo1" type="text" id="prezzo" onchange="aggiornaCalcoli(this)" size="8">  
    <input name="sconto1" type="text" id="sconto" onchange="aggiornaCalcoli(this)" size="8">  
    <input name="finale1" type="text" id="finale" size="8">

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.