Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Javascript: funzione somma "dinamica"

    In una pagina generata dinamicamente ho un certo numero di campi input text in cui vengono immessi dei valori numerici.

    Se io so che i campi input si chiamano tutti "ricavi_primo_prod" + un numero (ad es. ricavi_primo_prod1 , ricavi_primo_prod2 ecc.) come faccio a calcolarne la somma in Javascript?

    Il numero dei campi nominati in maniera simile lo posso ricavare ma non conoscere a priori.
    www.sergiogandrus.it
    Il mio blog sull'informatica

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    codice:
    function somma() {
      inp = document.getElementsByTagName('input'); 
      tot = 0;
    
      for (i=0; i<inp.length; i++) {
         if (inp[i].name.match(/^ricavi_primo_prod/i) {
             tot += parseInt(inp[i].value, 10);
             // oppure se sono decimali: tot += parseFloat(inp[i].value);
         }
      }
      alert(tot);
    }

    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Grazie per la risp e funziona.

    Mi potresti dire per cortesia dov'è l'errore qui?

    codice:
    var tot1 = 0
    pr=4
    for (x=1;x<=pr;x++){
    var a = perjav(document.form1.ricavi_primo_prod[x].value);
    tot1+=a
    }
    www.sergiogandrus.it
    Il mio blog sull'informatica

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    a parte che non si vede la funzione perjav
    ma questo

    document.form1.ricavi_primo_prod[x]

    non esiste nella pagina

    tu invece hai
    document.form1.ricavi_primo_prod1
    document.form1.ricavi_primo_prod2
    document.form1.ricavi_primo_prod3
    ...

    e ciò non è equivalente ad un ipotetico array "ricavi_primo_prod[]"


    quindi la riga diventa dovrebbe diventare
    a = perjav(eval('document.form1.ricavi_primo_prod'+x+' .value));

    ma ti sconsiglio di usare l'eval in favore di costrutti alternativi...
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    La funzione perjav mi formatta il valore immesso dalla notazione euro con separatore di migliaia ad una digeribile per javascript.

    Se mi sconsigli di usare eval cosa posso considerare?
    www.sergiogandrus.it
    Il mio blog sull'informatica

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    cioè nei vari campi sono immessi valori del tipo

    12
    1.235
    1.789.654

    ?

    E come separi eventuali decimali?
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    Ho dei decimali con precisione doppia (euro insomma).
    La funzione perjav prima leva il punto e poi sostituisce la virgola con il punto.
    In questo modo riesco a fare le operazioni con JS.

    prima--->1.000.150,25
    dopo--->1000150.25

    prima di ributtare tutto nel db riformatto in notazione euro (con un'altra funzione javascript)
    www.sergiogandrus.it
    Il mio blog sull'informatica

  8. #8
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da Harding
    Ho dei decimali con precisione doppia (euro insomma).
    La funzione perjav prima leva il punto e poi sostituisce la virgola con il punto.
    In questo modo riesco a fare le operazioni con JS.

    prima--->1.000.150,25
    dopo--->1000150.25

    prima di ributtare tutto nel db riformatto in notazione euro (con un'altra funzione javascript)
    allora modifica il codice che ti ho fatto prima e prova questo esempio

    codice:
    <html>
    <head>
    <script>
    
    function sommanumeri() {
      inp = document.getElementsByTagName('input'); 
      tot = 0;
      for (i=0; i<inp.length; i++) {
         if (inp[i].name.match(/^ricavi_primo_prod/i)) {
            val = inp[i].value;
            val = val.replace(/\./g, '').replace(/,/, '.'); 
            tot += parseFloat(val);
         }
      }
      alert(tot);
    }
    </script>
    </head>
    <body>
    <form onsubmit="sommanumeri()">
    <input type="text" name="ricavi_primo_prod1" value="1.569.236,25"/>
    <input type="text" name="ricavi_primo_prod2" value="3.001,25"/>
    <input type="submit" value="somma"/>
    </form>
    </body>
    </html>

    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.