Ho una funzione JS in una pagina HTML che deve gestire l'acquisto di alcuni prodotti, va tutto bene tranne il fatto che non vengono eseguite le istruzioni come vorrei io.
Quando si inserisce nel form html un valore per un ingrediente c'è l'attributo "onchange" che attiva la funzione.
La funzione dovrebbe:
- verificare se una quantità per quel prodotto era già stata scelta (lo faccio inserendo i prodotti scelti in un array chiamato "scelti" e verificando col ciclo while)
- se non è stato già scelto in precedenza viene messo nell'array e viene aggiornato il totale parziale con obj.form.prztotale.value = parziale (ultimo else)
- se è già stato scelto verrà trovato nell'array nel quale nella posizione seguente al nome del prodotto c'è la quantità scelta in precedenza (in posizione i c'è il nome del prodotto, in posizione i+1 la quantità), a questo punto calcola la differenza delle quantità scelte ed aggiorna l'importo.
Invece anche se il risultato del ciclo while è false, la funzione entra comunque in
- if (scelti[posizione+1] > obj.value)
- if (scelti[posizione+1] < obj.value)
a seconda che la nuova quantità sia minore o maggiore della vecchia.
Io vorrei che in questi 2 if ci entrasse solo se "trovato" risulta essere true.
Ho provato a mettere una { dopo if(trovato) e una } prima dell'ultimo else, ma in questo modo non viene mai eseguito l'ultimo else.
Come devo modificare il codice perché venga eseguito come voglio?
Ecco il codice (arrotonda è una funzione che mi permette di avere max 2 cifre dopo la virgola)
codice:
var trovato = new Boolean(false);
var posizione = 0, i = 0;
...
while (!trovato || i <= scelti.length)
if (obj.name == scelti[i])
{
trovato = true;
posizione = i;
i = scelti.length+1; //fa terminare il ciclo
}
else i++;
if (trovato)
if (scelti[posizione+1] > obj.value)
{
differenza = scelti[posizione+1] - obj.value;
alert("la differenza è "+differenza);
prezzo = obj.form.elements["pr"+obj.name].value;
parziale = arrotonda((parziale - (prezzo*differenza)),2);
scelti[posizione+1] = obj.value;
obj.form.prztotale.value = parziale;
}
else if (scelti[posizione+1] < obj.value)
{
differenza = obj.value - scelti[posizione+1];
alert("la differenza è "+differenza);
prezzo = obj.form.elements["pr"+obj.name].value;
parziale = arrotonda((parziale + (prezzo*differenza)),2);
scelti[posizione+1] = obj.value;
obj.form.prztotale.value = parziale;
}
else
{
scelti.push(obj.name);
scelti.push(obj.value);
prezzo = obj.form.elements["pr"+obj.name].value;
parziale = arrotonda((parziale + (prezzo*quantita)),2);
obj.form.prztotale.value = parziale;
}