mehrere Funktionen nacheinander aufrufen

kesnw

Erfahrenes Mitglied
Hi,

habe mehrer Funktionen und möchte diese nacheinander aufrufen. Die Funktionen sollen ein Formular auf Korrektheit überprüfen, nach dem Absenden des Formulars wird check() aufgerufen - "onclick='return check();'". Nach check_class() bricht wird das Formular weitergeleitet. Die anderen beiden Funktionen werden gar nicht berücksichtigt. Warum? Selbst wenn ich nach "return check_class()" ein alert setze wird dieses nicht mehr ausgefürht. Warum?

Code:
     function check()
     {
       return check_class();
       return check_calc_mode1();
       return check_calc_mode2();
     }

     function check_class()
     {
       if(document.modules.classNR.checked == true)
       {
         if(document.modules.CNO.value == "" || document.modules.CB.value == "" || document.modules.BA.value == "")
         {
           if(document.modules.CNO.value == "")
           {
            alert("Please define a limiter.");
             document.modules.CNO.focus();
             return false;
           }
           if(document.modules.CB.value == "")
           {
             alert("Please define a limiter.");
             document.modules.CB.focus();
             return false;
           }
           if(document.modules.BA.value == "")
           {
             alert("Please define a limiter.");
             document.modules.BA.focus();
             return false;
           }
         }
       return checkNumber_class4();
       }else
       {
         if(document.modules.CB.value == "" || document.modules.BA.value == "")
         {
           if(document.modules.CB.value == "")
           {
            alert("Please define a limiter.");
             document.modules.CB.focus();
             return false;
           } else
           {
             alert("Please define a limiter.");
             document.modules.BA.focus();
             return false;
           }
         }
       return checkNumber();
       }
     }

     function checkNumber_class4()
     {
       if(isNaN(document.modules.CNO.value) == true || isNaN(document.modules.CB.value) == true || isNaN(document.modules.BA.value) == true)
       {
         if(isNaN(document.modules.CNO.value) == true)
         {
           alert(document.modules.CNO.value+" is not a number.");
           document.modules.CNO.value="";
           return false;
         }
         if(isNaN(document.modules.CB.value) == true)
         {
           alert(document.modules.CB.value+" is not a number.");
           document.modules.CB.value="";
           return false;
         }
         if(isNaN(document.modules.BA.value) == true)
         {
           alert(document.modules.BA.value+" is not a number.");
           document.modules.BA.value="";
           return false;
         }
       }
       else
       {
         if(parseFloat(document.modules.CNO.value) >= parseFloat(document.modules.CB.value) || parseFloat(document.modules.CNO.value) >= parseFloat(document.modules.BA.value) || parseFloat(document.modules.CNO.value) >= parseFloat(document.modules.A.value) || parseFloat(document.modules.CB.value) >= parseFloat(document.modules.BA.value) || parseFloat(document.modules.CB.value) >= parseFloat(document.modules.A.value) || parseFloat(document.modules.BA.value) >= parseFloat(document.modules.A.value))
         {
           if(parseFloat(document.modules.CNO.value) >= parseFloat(document.modules.CB.value) || parseFloat(document.modules.CNO.value) >= parseFloat(document.modules.BA.value) || parseFloat(document.modules.CNO.value) >= parseFloat(document.modules.A.value))
           {
               alert("Limiter to large.");
               document.modules.CNO.value="";
               return false;
           }
           if(parseFloat(document.modules.CB.value) >= parseFloat(document.modules.BA.value) || parseFloat(document.modules.CB.value) >= parseFloat(document.modules.A.value))
           {
               alert("Limiter to large.");
               document.modules.CB.value="";
               return false;
           }
           if(parseFloat(document.modules.BA.value) >= parseFloat(document.modules.A.value))
           {
               alert("Limiter to large.");
               document.modules.BA.value="";
               return false;
           }
         }
       }
     }

     function checkNumber()
     {
       if(isNaN(document.modules.CB.value) == true || isNaN(document.modules.BA.value) == true)
       {
         if(isNaN(document.modules.CB.value) == true)
         {
           document.modules.CB.value="";
           return false;
         } else
         {
           document.modules.BA.value="";
           return false;
         }
       }
       else
       {
         if(parseFloat(document.modules.CB.value) >= parseFloat(document.modules.A.value) || parseFloat(document.modules.BA.value) >= parseFloat(document.modules.A.value) || parseFloat(document.modules.CB.value) >= parseFloat(document.modules.BA.value))
         {
           if(parseFloat(document.modules.CB.value) >= parseFloat(document.modules.A.value) || parseFloat(document.modules.BA.value) >= parseFloat(document.modules.A.value))
           {
             if(parseFloat(document.modules.CB.value) >= parseFloat(document.modules.A.value))
             {
               alert("Limiter to large.");
               document.modules.CB.value="";
               return false;
             } else
             {
               alert("Limiter to large.");
               document.modules.BA.value="";
               return false;
             }
           } else
           {
             alert("Limiter to large.");
             document.modules.CB.value="";
             return false;
           }
         }
       }
     }

     function check_calc_mode1()
     {
alert("Hallo");
       if(document.modules.m1_vgood.value <= document.modules.m1_good.value)
       {
         alert("Selected calculation mode not permitted.");
         document.modules.m1_vgood.focus();
         return false;
       }
       if(document.modules.m1_good.value <= document.modules.m1_tbi.value)
       {
         alert("Selected calculation mode not permitted.");
         document.modules.m1_good.focus();
         return false;
       }
     }

     function check_calc_mode2()
     {
       if(document.modules.m2_vgood.value <= document.modules.m2_good.value)
       {
         alert("Selected calculation mode not permitted.");
         document.modules.m2_vgood.focus();
         return false;
       }
       if(document.modules.m2_good.value <= document.modules.m2_tbi.value)
       {
         alert("Selected calculation mode not permitted.");
         document.modules.m2_good.focus();
         return false;
       }
     }
 
Zuletzt bearbeitet:
Weil return immer nur einen Rückgabewert ausgibt und dann die Funktion verlässt, egal was nach return kommt. Du müsstest in der oberen Funktion if-Anweisungen einbauen so, dass immer nur ein return ausgegeben wird. Hab mir jetzt deine Funktionen nicht angschaut, aber so nach dem Schema:
HTML:
function check()
     {
      if (check_class() && check_calc_mode1() && check_calc_mode2()) 
       return true;
      else
       return false;
     }

Edit:
Rechtschreibung angepasst und Beispiel einfügt. :)
 
Zuletzt bearbeitet:
Und nun? Ich brauch doch das return, da bei einem Fehler nicht gesendet werden soll. Wenn ich die return wegnehme erkennt er zwar die Fehler, bringt ein popup, sendet das Formular aber trotzdem...
 
Hallo,

ich hab das gleiche Problem, und komm mit o.g. Lösung aber nicht zum ziel.

Code:
function a () {
var a=1;
if (a!=0){
	 return false;
}
return true;
}
 
function b(){
var b=1;
if (b!=0){
	 return false;
}
return true;
}
 
function call_all(){
if (a() && b()){
	 return true;
}
return false;
}

rufe ich die funktion call_all() auf, wird nur die erste funktion a() aufgerufen. b() nicht.
Die Returns kann ich aus a() und b() ja nicht rausnehmen, weil ich ja dann nicht weiss, ob die funktion true oder false geliefert hat.

cu

cP
 
Es werden beide aufgerufen. Du hast in diesem Codestück keinerlei Fehler. So wie die beiden da stehen geben a() und b() immer false zurück, daher ist die Bedingung in call_all() nicht erfüllt und call_all() gibt immer false zrück, wo ist das Problem?
 
argl....

tu mir bitte den gefallen, und schau mal über folgende Code. Der soll genau das gleiche machen wie der obige. Ich such mir schon den Wolf....


Code:
function fcCheckEmail(){														//Überprüft ob e-mailadresse gültig ist
	var e;																	 //enthält e-mail-adresse
	var isgmxmail;															 //überprüfte Variable
	e=document.register.email.value;											//Wert in Variable setzen
	isgmxmail=e.substr((e.length-7), e.length);								//letzte 8 Zeichen des Strings einlesen
	if (isgmxmail!='@gmx.de'){												//wenn die letzen 8 Zeichen nicht
	alert("Bitte überprüfen Sie Ihre E-Mail-Adresse." +						 //@gmx.de lauten, Fehlermeldung ausgeben
		 "Sie muss auf \"@gmx.de\" enden!");
	return false;
	}
	isgmxmail=e.substr(0, (e.length-7));									 //den Reststring ohne @audi.de auf
	isgmxmail=isgmxmail.indexOf(".");										 //den inhalt eines Punktes prüfen
	if (isgmxmail==-1){														//falls nicht, Fehlermeldung....
	alert("Bitte überprüfen Sie Ihre E-Mail-Adresse.");
	return false;
}
return true;
}
function fcCheckKst(){														 //überprüft, ob die Kostenstelle
var kst;																	 //5 Stellen hat, und aus Zahlen
var asciicode;																//besteht
kst=document.register.kst;
var laenge;
laenge=kst.length;
if (laenge==5){
	for(var i=0; i<kst.length; i++){
	asciicode = kst.charCodeAt(i);
	if(asciicode > 47 && asciicode<58) {								 //Wenn der eingeg. Wert keine Zahl ist
			 alert ("Die eingegebene Kostenstelle hat ein falsches Format."+// -->Fehlerausgabe
						" Bitte folgendes Format benutzen: 01234");
				 return false;
		 }
	}
}else{																		 //Wenn der eingeg. Wert keine 5 Stellen
			 alert ("Die eingegebene Kostenstelle hat ein falsches Format."+//hat -->Fehlerausgabe
						" Bitte folgendes Format benutzen: 01234");
				 return false;
	}
return true;
}
function fcCheckPw(){														 //überprüft, ob die eingeg. Passwörter
var pw1;																	 //übereinstimmen, und auch größer
var pw2;																	 //6 Zeichen und kleine 20 Zeichen sind
pw1=document.register.password;
pw2=document.register.repassword;
aler("do check");
	if (pw1!=pw2){
			 alert ("Die eingegebenen Passwörter stimmen nicht überein.");
				 return false;
	}
	if(pw1.length<6 || pw1.length>20){
				 alert ("Bitte wählen Sie ein Passwort mit min. 6 Buchstaben"+
						" und max. 20 Buchstaben");
						return false;
	}
	return true;
}
function fcCheckForm(){														 //führt vor dem Submit alle nötigen
if (fcCheckEmail() && fcCheckKst() && fcCheckPw()){ alert ("alles paletti");}
}
</script>
 
<form action="register.php" method="post" name="register" onSubmit="fcCheckForm();">

Riesen Dank!

cu

cP
 
Zuletzt bearbeitet:
Also was mir so auf die schnelle auffällt ist, dass die Variable isaudimail nirgentwo definiert wird und in einer Bedinung das erst Mal vorkommt, was einen netten Fehler verursacht. Außerdem fehlt das return fcCheckForm(); im onsubmit und in der fcCheckForm() ein return true; nach dem alert() sowie ein return false; im else-Fall (der else-Fall fehlt ganz). Interessant ist auch, dass wenn ich bei der "Kostenstelle" das richtige Format, also 01234, wie es in der Fehlermeldung heißt angebe trotzdem eine Fehlermeldung kommt. Das müsste daran liegen, dass du kst=document.register.kst statt kst=document.register.kst.value; geschrieben hast (gleicher fehler bei den Variablen pw1 und pw2). Außerdem steht irgento aler("do check"); da fehlt das "t" in alert(), was auch zum scheitern des Scriptes beiträgt.

Ließ dir deine verbuggten Script bitte das nächste mal durch und hör auf die Fehlermeldungen.
 
Zuletzt bearbeitet:
Hallo,


danke für deine ausdauernde hilfe.

Ich hab die genannten Fehler korrigiert, aber es kommt bei mir garnicht zum Kostenstellencheck. Nach dem E-mail-Check ist fertig.....

so, nochmal hier der Code:

Code:
function fcCheckEmail(){														//Überprüft ob e-mailadresse gültig ist
	var e;																	  //enthält e-mail-adresse
	var isgmxmail;															 //überprüfte Variable
	e=document.register.email.value;											//Wert in Variable setzen
	isgmxmail=e.substr((e.length-7), e.length);								//letzte 8 Zeichen des Strings einlesen
	if (isgmxmail!='@gmx.de'){												//wenn die letzen 8 Zeichen nicht
	alert("Bitte überprüfen Sie Ihre E-Mail-Adresse." +						 //@gmx.de lauten, Fehlermeldung ausgeben
		  "Sie muss auf \"@gmx.de\" enden!");
	return false;
	}
	isgmxmail=e.substr(0, (e.length-7));									   //den Reststring ohne @gmx.de auf
	isgmxmail=isgmxmail.indexOf(".");										 //den inhalt eines Punktes prüfen
	if (isgmxmail==-1){														//falls nicht, Fehlermeldung....
	alert("Bitte überprüfen Sie Ihre E-Mail-Adresse.");
	return false;
  }
  return true;
}
function fcCheckKst(){														  //überprüft, ob die Kostenstelle
  var kst;																	  //5 Stellen hat, und aus Zahlen
  var asciicode;																//besteht
  kst=document.register.kst;
  var laenge;
  laenge=kst.length;
  if (laenge==5){
	for(var i=0; i<kst.length; i++){
	asciicode = kst.charCodeAt(i);
	if(asciicode > 47 && asciicode<58)  {								 //Wenn der eingeg. Wert keine Zahl ist
			  alert ("Die eingegebene Kostenstelle hat ein falsches Format."+// -->Fehlerausgabe
						" Bitte folgendes Format benutzen: 01234");
				 return false;
		  }
	}
 }else{																		 //Wenn der eingeg. Wert keine 5 Stellen
			  alert ("Die eingegebene Kostenstelle hat ein falsches Format."+//hat -->Fehlerausgabe
						" Bitte folgendes Format benutzen: 01234");
				 return false;
	}
 return true;
}
function fcCheckPw(){														   //überprüft, ob die eingeg. Passwörter
   var pw1;																	 //übereinstimmen, und auch größer
   var pw2;																	 //6 Zeichen und kleine 20 Zeichen sind
   pw1=document.register.password;
   pw2=document.register.repassword;
   aler("do check");
	if (pw1!=pw2){
			  alert ("Die eingegebenen Passwörter stimmen nicht überein.");
				 return false;
	}
	if(pw1.length<6 || pw1.length>20){
				 alert ("Bitte wählen Sie ein Passwort mit min. 6 Buchstaben"+
						" und max. 20 Buchstaben");
						return false;
	}
	return true;
}
function fcCheckForm(){														 //führt vor dem Submit alle nötigen
   if (fcCheckEmail() && fcCheckKst() && fcCheckPw()){
	 alert ("alles paletti");
	 return true;
   }
   else {
	 alert ("nix paletti!!");
	 return true;
   }
   
}
</script>
<?php
	print_r($_POST);
?>
<form action="register.php" method="post" name="register" onSubmit="return fcCheckForm();">

Wie gesagt, nach dem email-check ist sense. ich komme garnicht bis zum kostenstellencheck

cu

cP
 
So hab ich's getestet:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
 <head><title>Untitled</title><meta name="AUTHOR" content="con-f-use@gmx.net" /><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 
 </head><body>
 
 <script type="text/javascript"><!--
 
 	function fcCheckEmail(){    		    		    		    			
 		var e = document.register.email.value,
 			isgmxmail = e.substr((e.length-7), e.length);
 		if (isgmxmail!='@gmx.de'){
 			alert("Bitte überprüfen Sie Ihre E-Mail-Adresse.Sie muss auf \"@gmx.de\" enden!");
 			return false;
 		}
 		/*isaudimail=e.substr(0, (e.length-7));
 		isaudimail=isgmxmail.indexOf(".");
 		if (isaudimail==-1){
 			alert("Bitte überprüfen Sie Ihre E-Mail-Adresse.");
 			return false;
 		}*/
 		return true;
 	}
 
 	function fcCheckKst(){
 		var kst = document.register.kst.value,
 			asciicode;
 		/*if (laenge==kst.length;) {
 			for(var i=0; i<kst.length; i++){
 				asciicode = kst.charCodeAt(i);
 				if(asciicode > 47 && asciicode < 58) {
 		    		alert ("Die eingegebene Kostenstelle hat ein falsches Format. Bitte folgendes Format benutzen: 01234");
 					return false;
 				}
 			}
 		} else {
 			alert ("Die eingegebene Kostenstelle hat ein falsches Format. Bitte folgendes Format benutzen: 01234");
 			return false;
 		}*/
 		return true;
 	}
 
 	function fcCheckPw(){
 		var pw1=document.register.password.value,
 			pw2=document.register.repassword.value;
 		if (pw1!=pw2) {
 			alert("Die eingegebenen Passwörter stimmen nicht überein.");
 			return false;
 		}
 		if(pw1.length<6 || pw1.length>20){
 			alert ("Bitte wählen Sie ein Passwort mit min. 6 Buchstaben und max. 20 Buchstaben");
 			return false;
 		}
 		return true;
 	}
 
 	function fcCheckForm(){
 		if (fcCheckEmail() && fcCheckKst() && fcCheckPw()) { alert ("Alles paletti!"); return true; }
 		else return false;
 	}
 </script>
  
 <form action="register.php" method="post" name="register" onsubmit="return fcCheckForm();"><div>
 	email <input name="email" /><br />
 	kst <input name="kst" /><br />
 	password <input type="password" name="password" /><br />
 	repassword <input type="password" name="repassword" /><br />
 	<input type="submit" value="Submit!" />
 </div></form>
 
 </body></html>
Das mit fcCheckKst() ist aber immernoch murks, weils immer false liefert, daher habe ich's einfach auskommentiert. Daran musst du selber noch basteln. Was der ganze Mist am Ende von fcCheckEmail() mit audimail soll, verstehe ich auch nicht - den hab ich auch vorsichtshalber mal auskommentiert Da deinierst du nämlich was, benutzt es nicht und definierst es gleich im nächsten Schritt neu.

Soviele Fehler in einem Script hab ich selten erlebt, Herrgott!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück