Spilli96: Funktion will funktionieren

hallo ich wollte ein script zur formularüberprüfung schreiben und es wird auch die funktion aufgerufen aber mehr nicht und formular wird einfach abgeschickt auch wenn es falsch ist.

hier mal der code:

  
function checkForm() {  
 var strError="";  
	  
 //username  
 if (document.regis_form.username.value == "")  
  strError += "-kein Name\n";  
 if (20 < document.regis_form.username.value.length)  
  strError += "-Name: max. 20 Zeichen\n";  
	  
 //password  
 if (document.regis_form.password.value == "")  
  strError += "-kein Passwort\n";  
 if (30 < document.regis_form.password.value.length)  
  strError += "-Passwort: max. 30 Zeichen\n";  
	  
 //email  
 if (!validEmail(document.regis_form.email.value))  
  strError += "-keine gültige E-Mail Adresse\n";  
  
 //ausgabe  
 if (strError.legth > 0 ) {  
  document.regis_form.error.write(strError);  
  return false;  
 }  
}  
  
function validEmail(email) {  
 var strReg = "^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+\.+([a-zA-Z0-9]{2,4})+$";  
 var regex = new RegExp(strReg);  
 return(regex.test(email));  
}  

  1. if (strError.legth > 0 ) {

    huhu, hier bitte einmal krrigieren, da es legth nicht gibt ;)

    ansonsten kopier mal das form rein, dann kann man einfacher testen und anhand der browser-fehlermeldungen besser schauen woran es liegt ;)

    1. if (strError.legth > 0 ) {

      huhu, hier bitte einmal krrigieren, da es legth nicht gibt ;)

      danke aber das hat es noch nicht zum funktionieren gebracht

      ansonsten kopier mal das form rein, dann kann man einfacher testen und anhand der browser-fehlermeldungen besser schauen woran es liegt ;)

        
      <form onsubmit="return checkForm();" name="regis_form" method="post" action="regis.php">  
      <table id="regis_form">  
       <tr>  
        <td>  
         <div name="error"></div>  
        </td>  
       </tr>  
       <tr>  
        <td>  
         <label for="username">Username</label>  
         <br/>  
         <input id="username" name="username"/>  
        </td>  
       </tr>					  
       <tr>  
        <td>  
         <label for="password">Passwort</label>  
         <br/>  
         <input id="password" name="password" type="password"/>  
        </td>  
       </tr>						  
       <tr>  
        <td>  
         <label for="email">E-Mail</label>  
         <br/>  
         <input id="email" name="email"/>  
        </td>  
       </tr>									  
       <tr>  
        <td>  
         <input id="regis_button" type="submit" name="submit" value="Registrieren"/>  
        </td>  
       </tr>  
      </table>  
      </form>  
      
      
      1. <form onsubmit="return checkForm();" name="regis_form" method="post" action="regis.php">
        <table id="regis_form">

          
        also erstens vergibst du regis\_form einmal als id und einmal als name bei 2 verschiedenen elementen, das führt zwar nicht zwangsläufig zu problemen, würde ich aber strikt vermeiden  
          
        weiterhin liegt der fehler hier:  
          
        document.regis\_form.error.write(strError);  
          
        diese zeile führt zu einem fehler, denn der browser weiß nichts damit anzufangen  
        erstens gibt es 2 objekte mit dem namen / id, zweitens bin ich mir bzgl des writes ncht so sicher  
          
        nimm:  
           <div id="error\_field"></div>  
          
        und  
          
        document.getElementById("error\_field").innerHTML=strError;  
          
        nur als beispiel, und schon funzt es ;)
        
        1. Danke
          ich bin noch neu auf dem gebiet aber jetzt klappt alles.

          Spilli96

          1. Danke
            ich bin noch neu auf dem gebiet aber jetzt klappt alles.

            Spilli96

            macht ja nix, mir wurde hier auch schon so oft geholfen, und niemand (soweit ich mich erinnern kann) verurteilt hier jemanden, weil er mit etwas gerade erst anfängt - wir alle sind auf verschiedenen gebieten anfänger, und wenn ich das richig beurteile, ist das forum ja auch dafür gedacht ;)

            LG

      2. Hi,

        <form onsubmit="return checkForm();" name="regis_form" method="post" action="regis.php">
        <table id="regis_form">

        zur Mehrdeutigkeit der name- und id-Attribute hat Mech schon etwas gesagt. Theoretisch ist die Dopplung hier zwar erlaubt, ich weiß aber nicht, ob das alle relevanten Browser auch so sehen. Wozu hat die Tabelle hier überhaupt eine ID?

        <div name="error"></div>

        Ein div-Element hat kein name-Attribut. Und es ist kein Formularelement. Das sind schon zwei Gründe, warum es nicht mit forms.regis_form.error ansprechbar ist. Daher gibt es bei dieser Zeile einen Fehler:

        document.regis_form.error.write(strError);

        Den zweiten Fehler, nämlich dass das div-Element auch keine write-Methode hat, stellt der Browser gar nicht mehr fest, weil er vorher aufgibt. Und weil dein onsubmit-Eventhandler mit einem Fehler abbricht, kann er auch das Absenden des Formulars nicht verhindern.

        Ciao,
         Martin

        --
        Um die Wahrheit zu erfahren, muss man den Menschen widersprechen.
          (George Bernhard Shaw)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hallo,

    if (20 < document.regis_form.username.value.length)

    eigenwillige Schreibweise - meist schreibt man den zu prüfenden Ausdruck links, die Konstante rechts. So wie du es formulierst, ist es zwar auch richtig, aber ungewohnt.

    document.regis_form.error.write(strError);

    Was ist das denn?!

    return false;

    Und wie wird die Funktion an das Formularobjekt gebunden?

    function validEmail(email) {
    var strReg = "^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+.+([a-zA-Z0-9]{2,4})+$";
    var regex = new RegExp(strReg);
    return(regex.test(email));
    }

    Du prüfst sehr scharf. In Mailadressen ist wesentlich mehr erlaubt, als du glaubst.

    Ciao,
     Martin

    --
    Nein, es ist nicht wahr, dass bei der Post Beamte schneller befördert werden als Pakete.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hi,

      if (20 < document.regis_form.username.value.length)
      eigenwillige Schreibweise - meist schreibt man den zu prüfenden Ausdruck links, die Konstante rechts. So wie du es formulierst, ist es zwar auch richtig, aber ungewohnt.

      Vermeidet aber z.B. beim Operator ==, daß das Vergessen des 2. = durchrutscht, denn 42 = answertoquestionoflivetheuniverseandeverything ergibt einen Fehler, während answertoquestionoflivetheuniverseandeverything = 42 keinen ergibt.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      1. Hallo,

        if (20 < document.regis_form.username.value.length)
        eigenwillige Schreibweise - meist schreibt man den zu prüfenden Ausdruck links, die Konstante rechts. So wie du es formulierst, ist es zwar auch richtig, aber ungewohnt.
        Vermeidet aber z.B. beim Operator ==, daß das Vergessen des 2. = durchrutscht, denn 42 = answertoquestionoflivetheuniverseandeverything ergibt einen Fehler, während answertoquestionoflivetheuniverseandeverything = 42 keinen ergibt.

        ja, der Vorteil ist mir bekannt und bewusst; mir fällt es trotzdem schwer, mich an diesen eigentlich sinnvollen Stil zu gewöhnen. ;-)

        Ciao,
         Martin

        --
        Der Afrika-Forscher wird gefragt: "Stimmt es, dass man nicht von Löwen angefallen wird, wenn man eine Fackel trägt?" - "Kommt drauf an. Man muss die Fackel sehr schnell tragen."
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. Deine Funktion gibt nirgends true zurück, geht das dann wirklich wenn du die bisher besprochenen Sachen korrigierst?

    1. Deine Funktion gibt nirgends true zurück, geht das dann wirklich wenn du die bisher besprochenen Sachen korrigierst?

      jup geht, da true der standardwert ist

      siehe http://de.selfhtml.org/javascript/beispiele/formulareingaben.htm@title=http://de.selfhtml.org/javascript/beispiele/formulareingaben.htm

      LG

      1. jup geht, da true der standardwert ist

        Ok aber sauber programmiert ist es jedenfalls nicht. Viel zu viel Denkarbeit beim Versuch den Code zu verstehen.