Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Anomalia su parseInt

  1. #1

    Anomalia su parseInt

    Ciao,
    ho una form che memorizza dati di un magazzino e delle vendite.
    Quando il cliente conclude una vendita e invia i dati, eseguo una serie di controlli (se ha compilato i campi, se ha inserito solo numeri, decimali ecc.) e poi invio alla pagina php che elabora tutto.

    Durante il classico ciclo for
    for(i=0;i<document.moduloVendita.length;i++){

    se il nome del campo è "quantita_disp", memorizzo in una variabile temporanea il valore (che corrisponde a quanto caricato in magazzino). Quando arrivo al campo "quantita_car", verifico che abbia venduto meno quantita di quanta ne sia disponibile.

    Ora il problema è che se premo il tasto "concludi ordine" va tutto ok.
    Se invece aggiorno la quantita venduta e, mentre sono con il cursore su quel campo, premo invio (quindi la form viene inviata lo stesso), il controllo mi dice che ho inserito un valore superiore a quanto caricato VVoVe:

    Aggiugendo alla funzione di confronto il parseInt per i due valori, funziona sempre

    :master: sapete dirmi se c'è qualcosa che non va.. qualche anomalia javascript?

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    A parole e' quasi chiaro... vediamo il codice

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    codice:
    	function controllo(){
    		for(i=0;i<document.moduloVendita.length;i++){
    			if(document.moduloVendita.elements[i].name.substr(0,4)=="qua_"){
    				quantitaTemp = document.moduloVendita.elements[i].value;
    			}
    			else{
    				if(document.moduloVendita.elements[i].name.substr(0,4)=="cad_"){
    					stringa = new String(document.moduloVendita.elements[i].value);
    					stringa = stringa.replace(",",".");
    					if(isNaN(stringa)){
    						alert("Attenzione, il valore "+document.moduloVendita.elements[i].value+" non è un numero valido. Usare la virgola per separare i decimali e non usare punti per le migliaia");
    						return false;
    					}
    				}
    				else if (document.moduloVendita.elements[i].name.substr(0,4)=="quc_"){
    					if(isNaN(document.moduloVendita.elements[i].value)){
    						alert("Attenzione, il valore "+document.moduloVendita.elements[i].value+" non è un numero valido.");
    						return false;
    					}
    					if(parseInt(document.moduloVendita.elements[i].value) > parseInt(quantitaTemp)){
    						alert("Non è possibile concludere la vendita perchè per uno dei prodotti acquistati risultano in magazzino meno scorte di quanto venduto");
    						return false;
    					}
    				}
    				else if(document.moduloVendita.elements[i].name.substr(0,4)=="tot_"){
    					stringa = new String(document.moduloVendita.elements[i].value);
    					stringa = stringa.replace(",",".");
    					if(isNaN(stringa)){
    						alert("Attenzione, il valore "+document.moduloVendita.elements[i].value+" non è un numero valido. Usare la virgola per separare i decimali e non usare punti per le migliaia");
    						return false;
    					}
    				}
    			}
    		}
    		return true;
    	}
    due suggerimenti di lettura:
    - visto che devo scorrere tutti i campi, eseguo un if sulle prime 4 lettere del nome cosi da fare i controlli.
    L'ordine in cui sono negli IF è lo stesso che hanno nella form, per cui non c'è il rischio che quantitaTemp venga confrontata con un elements del rigo superiore.
    - uso il replace perchè all'utente viene piu spontaneo inserire i decimali con la virgola anzichè con il punto

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.