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.