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

    Problema con valore minimo in input type text e parseDouble!

    Ciao ragazzi, avrei solo una piccola domanda....ho scritto questo pezzo di codice per incrementare e decrementare numeri in una textfield e fare altre somme che mi servono:

    function incrementa() {

    var i = document.getElementById("amount1").value;
    document.getElementById("amount1").value = parseInt(i) + 1;
    var tot = document.getElementById("amount1tot").value;
    document.getElementById("amount1tot").value = parseInt(tot) + 14;
    var total = document.getElementById("totale").value;
    document.getElementById("totale").value = parseInt(total) + 14;

    }


    function decrementa() {
    var i = document.getElementById("amount1").value;
    document.getElementById("amount1").value = parseInt(i) - 1;
    var tot = document.getElementById("amount1tot").value;
    document.getElementById("amount1tot").value = parseInt(tot) - 14;
    var total = document.getElementById("totale").value;
    document.getElementById("totale").value = parseInt(total) - 14;
    }

    Il mio problema è che non riesco a capire come bloccare il decremento a zero, perchè non voglio che vada in negativo! Mi potreste dare una mano?! ah...in più se sapete dirmi come fare al posto di parseInt, il parseDouble in maniera che i numeri tipo 14, vengano scritti: 14,00. Grazie in anticipo!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, per limitare a 0 (zero) puoi impostare una condizione che, a grandi linee, fa questo:
    - se "value" meno il valore da sottrarre è maggiore o uguale a 0: if(value-valore_da_sottrarre>=0) allora esegui l'operazione;
    - altrimenti imposta a zero il "value" (o semplicemente non eseguire alcuna operazione).

    Un altra soluzione puoi trovarla con l'uso di Math.max (che io preferisco) a cui passi i due valori, cioè 0 (il valore limite) e il "value" decrementato. Tale funzione prenderà il valore massimo tra i due. Quindi restituirà 0 se "value-valore_da_sottrarre" è inferiore a zero.

    Per quanto riguarda i numeri con decimali, non esiste parseDouble in javascript (per ragioni tecniche).
    Ciò che vuoi ottenere tu, puoi farlo con toFixed

    Ad ogni modo puoi risolvere in varie maniere.
    Giusto per provare ho messo giù qualche riga che fa quanto hai chiesto (se non di più). Posto un esempio funzionante da cui puoi prendere spunto:
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <script type="text/javascript">
          function addVal(e,o){
            // Aggiunge il valore numerico indicato, eseguendo una somma algebrica, al value dell'elemento specificato.
            // Restituisce l'elemento DOM o null.
            //
            //  e: elemento DOM o stringa che ne rappresenta il nome ID
            //  o {
            //    add: valore da sommare
            //    min: limite minimo
            //    max: limite massimo
            //  }
            //
            var el = (el = typeof e == "string" ? document.getElementById(e)  : e) && "value" in el ? el : null; // verifico che "el" sia un  elemento DOM valido e abbia una proprietà "value", altrimenti  restituisco null
            if(el&&o) el.value =  Math.max(isNaN(+o.min)?-Infinity:+o.min,  Math.min(isNaN(+o.max)?Infinity:+o.max,+(el.value)+(+o.add||0)));
            return el;
          };
          function fixDec(e){
            // Formatta il value dell'elemento specificato, impostandolo a 2 decimali fissi.
            // Restituisce l'elemento DOM o null.
            //
            //  e: elemento DOM o stringa che ne rappresenta il nome ID
            //
            var el = (el = typeof e == "string" ? document.getElementById(e) : e) && "value" in el ? el : null;
            if(el) el.value = (+el.value).toFixed(2);
            return el;
          }
          function incrementa() {
            fixDec(addVal("amount1",{add:1}));
            fixDec(addVal("amount1tot",{add:14}));
            fixDec(addVal("totale",{add:14}));
          }
          function decrementa() {
            fixDec(addVal("amount1",{add:-1,min:0}));
            fixDec(addVal("amount1tot",{add:-14,min:0}));
            fixDec(addVal("totale",{add:-14,min:0}));
          }
        </script>
      </head>
      <body>
        <input type=number id="amount1" value=0 onchange="fixDec(this)">
        <input type=number id="amount1tot" value=0 onchange="fixDec(this)">
        <input type=number id="totale" value=0 min=0 onchange="fixDec(this)">
        <hr>
        <input type="button" value="-" onclick="decrementa()">
        <input type="button" value="+" onclick="incrementa()">
      </body>
    </html>
    Ho chiaramente rielaborato il tuo script di partenza per ottimizzare il tutto.
    Il codice è molto stringato, spero si riesca a capire qualcosa, ho giusto inserito qualche commento ma nel caso ti serva qualche delucidazione chiedi pure.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.