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

    [Js] Eseguire una funzione in un ciclo

    Ciao a tutti, ho un problema con una funzione all'interno di un ciclo, ecco lo script:

    codice:
    myString = new String(document.SendMail.destinatario.value)
    splitStr = myString.split(";")
    
    for (i=0; i < splitStr.length; i++){
    	if (ValidaEmail(splitStr[i]) == false) {
    		alert("...");
    		document.SendMail.destinatario.focus();
    		return(false);
    	 }
    	 break;
    	 }
    In pratica io dovrei eseguire il controllo sulla validità (formale) degli indirizzi e-mail inseriti in un form. In uno stesso campo posso essere inseriti più indirizzi separati da ;

    Il primo controllo viene eseguito correttamente ma gli altri indirizzi inseriti non vengono controllati. Dove sbaglio?

    Ciao e grazie R.
    Nostra patria è il mondo intero, nostra legge la libertà.

  2. #2
    è molto semplice...
    togli il break e vedi che funziona...
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  3. #3
    no, non è questa la soluzione...

    il problema è che eseguendo la funzione all'interno del ciclo non so per quale ragione il valore del mio array viene "cancellato"

    in pratica se questa è la mia stringa "pippo@pluto.it;pippo2"
    il ciclo si ferma dopo il primo "giro" avendo verificato che il primo indirizzo è giusto

    nel submit del form se può servire richiamo la funzione con l'evento onSubmit (onSubmit="return CheckMail()")

    Nostra patria è il mondo intero, nostra legge la libertà.

  4. #4
    myString = new String(document.SendMail.destinatario.value)
    splitStr = myString.split(";")

    for (i=0; i < splitStr.length; i++){
    if (ValidaEmail(splitStr[i]) == false) {
    alert("...");
    document.SendMail.destinatario.focus();
    return false;
    }
    }

    prova cosi'
    ----------------------
    i rulez.-.dovrebbero mettere "pippo" come parola riservata in tutti i linguaggi

    The Cyberpunk System One
    http://www.geocities.com/notoleranceforyou/Hymagition.html

  5. #5
    perchè non vuoi darmi ascolto??
    il break ti blocca il ciclo al primo giro... è per questo che si ferma!
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  6. #6
    non è che non ti voglio dare ascolto (tra l'altro avevi ragione) ma il mio problema è un'altro e non è legato al break (purtroppo).. rifacciamo da capo

    questa è il mio ciclo:

    codice:
    myString = new String(document.SendMail.destinatario.value)
    	splitStr = myString.split(";")
    	
    	for (i=0; i < splitStr.length; i++)
    	{
    		var mailAddress = splitStr[i];
    		
    		if (ValidaEmail(mailAddress) == false)
    		{
    			alert(mailAddress);
    			document.SendMail.destinatario.focus();
    			return(false);
    			break;
    		}
    	 }
    il break voglio che ci sia perchè dal momento che la funzione intercetta un indirizzo e-mail non valido si deve bloccare (anche commentandolo cmq non cambia il risultato)

    Non so a questo punto se nella funzione ValidaEmail() ci sia qualcosa che "blocca" l'esecuzione del ciclo. Io posto anche quello...

    codice:
    function ValidaEmail(stringa)
    { 
      if (stringa=="")
    	return(true)
      var carrattere=""
      var testo =0
      var vannobene = "abcdefghijklmnopqrstuvwxyz_@.ABCDEFGHIJKLMNOPQRSTUVWXYZƒŠŒšœŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ0123456789";
      var checkStr = stringa;
      var aposto = true;
      var chiocciola = 0
      var punto = 0
      //alert(stringa);
      for (i = 0;  i < checkStr.length;  i++)
      {
    	 carattere = checkStr.charAt(i);
    	 for (j = 0;  j < vannobene.length;  j++)
    	 {
    		if (carattere == vannobene.charAt(j))
    		{
    		  if (carattere=="@")
    		  {
    			 if (testo==0)
    				aposto=false;
    			 chiocciola = chiocciola +1;
    			 testo = -1;
    		  }
    		  if (carattere==".")
    		  {
    			 if (testo==0)
    				aposto=false;
    			 punto= punto +1
    			 testo = -1;
    		  }
    		  testo = testo + 1;
    		  break;
    		}
    
    		if (j == vannobene.length)
    		{
    		  aposto = false;
    		  break;
    		}
    	 }
       }
    	if (!aposto || chiocciola !=1 || punto ==0 || testo < 2 || testo >3 )
       {
    		return (false);
       }
    return (true);
    }
    mo' piango...
    Nostra patria è il mondo intero, nostra legge la libertà.

  7. #7

    Epilogo

    so che in realtà non può essere utile a nessuno in quanto il mio problema era dato dalla seconda funzione che richiamavo (ValidaEmail()), ma posto ugualmente la soluzione

    codice:
    function CheckMail()
    {
    	myString = new String(document.SendMail.destinatario.value)
    	splitStr = myString.split(";")
    	
    	for (i=0; i < splitStr.length; i++)
    	{
    		var mailAddress = splitStr[i];
    		if (CheckStaCIppa(mailAddress) == false)
    		{
    			alert("...");
    			document.SendMail.destinatario.focus();
    			return(false);
    		}
    	 }
    }
    
    
    function CheckStaCIppa(varmail){
    	Filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/; 
    	if (!Filtro.test(varmail)){ 
    		return(false); 
    	} 
    	return(true);
    }
    Ciao a tutti e grazie dell'aiuto
    Nostra patria è il mondo intero, nostra legge la libertà.

  8. #8
    ok, sono contento che abbia risolto...
    ti dico una cosa però:

    se il tuo for contiene un return in caso che fallisca una cosa e vuoi interromperlo... è inutile che ci metti il break... tanto non lo leggerebbe perchè il return fa saltare tutto al punto in cui è stata chiamata la funzione... ok?

    ciao
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  9. #9
    ok grazie imparo imparo imparo imparoooooo

    Nostra patria è il mondo intero, nostra legge la libertà.

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.