Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    Problema con statement if else

    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;
    }

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ho cambiato le condizioni in questo modo e adesso funziona
    codice:
    if ((trovato) && (scelti[posizione+1] > obj.value))
    {
    ...
    }
    else if ((trovato) && (scelti[posizione+1] < obj.value))
    {
    ...
    }
    
    if (trovato == false)
    {
    ...
    }
    Ho un'altra domanda, per quale motivo non entra nell'ultimo if se scrivo if(!trovato) al posto di if(trovato==false)?

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Mi sono accorto che anche nel primo if e nell'else if se non esplicito il valore che deve avere "trovato" il controllo non funziona, in pratica devo scrivere trovato == true per far si che venga preso in considerazione.
    E' normale questo comportamento?
    Di Javascript ne so poco, ma mi aspetterei che if(trovato) e if(trovato == true) siano equivalenti, così come if(!trovato) e if(trovato == false).

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.