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

    JS(switch) - non entra nel case

    Hello world!
    Ho creato un controllo in JS su dei campi di un form. Nel caso l'utente mi inserisca dei campi nulli o caratteri non validi, mi cambia lo stato visibility di una scritta a fianco. E fin quì tutto bene.
    Ho un problema nel controllo della data.
    Una volta superata una serie di "if/else" gli dico di prendere il paramentro mese e di entrare in uno switch per confrontarlo. Lo switch mi serve per eseguire un controllo sull'anno bisestile.
    Il problema è che non entra in nessuno dei case e tira dritto al default. Perchè????

    LINK

    Questa è la porzione di codice dello switch:
    codice:
    else {
    	    //CHECK IF THE DAY VALUE IS CORRECT DEPENDING BY THE YEAR
    		switch (month) {
    		case 01:
    		case 03:
    		case 05:
    		case 07:
    		case 08:
    		case 10:
    		case 12: if (checkNum(1,day,31)==false) alert(1);/*error_msg("error_date")*/; break;
    		case 04:
    		case 06:
    		case 09:
    		case 11: if (!checkNum(1,day,30)) alert(2);/*error_msg("error_date")*/; break;
    		case 02:  if (bisestile(year)) {
    		           if (!checkNum(1,day,29)) alert(3);/*error_msg("error_date")*/; break;
    				 } else {
    				   if (!checkNum(1,day,28)) alert(4);/*error_msg("error_date")*/; break;
    				 }
    		default: alert(month);/*error_msg("error_date")*/; break;
    	    }
    Ho inserito qualche alert per debuggare il codice.

  2. #2
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao Sandrocchio_0.1,

    Per quanto riguarda lo switch... il mese è un numero o una stringa che rappresenta un numero?
    per ogni case devi mettere un break altrimenti verranno eseguiti anche gli altri.

    Per quanto riguarda il controllo della data... senza complicarsi la vita con tanti controlli è meglio sfruttare l'oggetto Date di javascript.
    Se ci spieghi cosa devi controllare te possiamo dare una mano... io per controllare date mi sono fatto questa funzioncina
    codice:
    function dataValida(txt){
    	var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
    	if(re.test(txt)){
    		var adata = txt.split('/');
    		var gg = parseInt(adata[0],10);
    		var mm = parseInt(adata[1],10);
    		var aaaa = parseInt(adata[2],10);
    		var xdata = new Date(aaaa,mm-1,gg)
    		if((xdata.getFullYear()==aaaa) && (xdata.getMonth()==mm-1) && (xdata.getDate()==gg))
    			return xdata
    		else return false
    	}else return false
    }

  3. #3
    opsss, la tua domanda è una risposta indiretta alla mia. I valori venivano passati come stringhe. Ecco perchè non passava per i case.

    Grazie per controllo della data. Ho usato quel popò di roba perchè sono ancora alle prime armi e devo presentare il mio lavoro al corso, quindi per il momento è meglio che inserisca codici da me elaborati (nel caso mi chiedano di spiegarli), ma me lo sono comunque salvato, ci darò un'occhiata questo week end . Però...a proposito del tuo codice, come lo fai il controllo dell'anno bisestile?

    Comunque adesso il form funziona.
    Ho solo due piccole cose da sistemare. E se sei daccordo, mi servirebbe il tuo consiglio.

    1 Devo controllare che all'interno di un campo stringa inserito dall'utente non siano presenti certi caratteri.
    Ho scritto questo codice...ma non funziona :master:
    Cosa consigli?

    codice:
    	function check(name, surname, day, month, year, phone, email) {
    	  //CHARACTERS THAT DOESN'T LIKE
    	  var notValid = "\,|,!,£,$,%,&,/,(,),=,?,^,<,>,[,],{,},°,#,§"
    
    	  //SEQUENCE TO CHECK ANY ERRORS SUBMITED BY THE USER
    	  if (name=="" || name.indexOf(notValid)!=-1) {
    	    error_msg("error_name");
    		return false;
    2 problema
    Adesso lo scwitch mi funziona.
    Però lo switch si trova dentro un else ed è seguito da una chiamata ad una funzione pop up.
    } else {
    switch(){
    }
    chiamata alla funzione
    }
    Quello che vorrei fare è ritornare un valore booleano da switch che mi permetta di creare una condizione che nel caso true mi chiami la funzione.

    Troppo incasinato??
    codice:
     }
    	  else {
    	    //CHECK IF THE DAY VALUE IS CORRECT DEPENDING BY THE YEAR
    		switch (month) {
    		case "01":
    		case "03":
    		case "05":
    		case "07":
    		case "08":
    		case "10":
    		case "12": if (checkNum(1,day,31)==false) error_msg("error_date"); break;
    		case "04":
    		case "06":
    		case "09":
    		case "11": if (!checkNum(1,day,30)) error_msg("error_date"); break;
    		case "02":  if (bisestile(year)) {
    		           if (!checkNum(1,day,29)) error_msg("error_date"); break;
    				 } else {
    				   if (!checkNum(1,day,28)) error_msg("error_date"); break;
    				 }
    		default: error_msg("error_date"); break;
    	    }
    		openPopUp(name, surname, day, month, year, phone, email);
    	  }
    Così come l'ho fatta sia che entra nel case e trova break o che esca mi apre sempre la popup.

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.