Passwort-Vergleich reagiert nicht


#1
Das Script selbst hab ich mir ergoogelt, und angeblich funktioniert es. Aber eben nur angeblich.

Code:
<SCRIPT language=JavaScript type=text/javascript>
            <!--
            function FormularCheck(){
                var msgStr = '';
                Eingabepw1 = document.formedit.tpass.value;
                Eingabepw2 = document.formedit.tpass2.value;
                if (Eingabepw1 != Eingabepw2) {msgStr += "  - Das wiederholte Passwort stimmt nicht mit Ihrer ersten Eingabe überein!";}
                if (msgStr.length < 2){ // falls keine Fehlermeldung
                    return true;
                } else {
                    alert ("Folgende Eingabefelder sind nicht richtig ausgefüllt:\n\n" + msgStr);
                    return false;
                }
            }
            //-->
            </SCRIPT>
            <form id="formedit" action="<?php echo $_SERVER['PHP_SELF'];?>?action=team&do=save" method="post" onsubmit="return FormularCheck();">
                <?php echo $tidtemp;?>
                
                <fieldset class="fs_aussen"><legend class="fs_aussen_legend">Team-Mitglied bearbeiten / neu erstellen</legend>
                <div width="40%" style="float:left;">
                    <fieldset class="fs_innen"><legend class="fs_innen_legend">Stammdaten</legend>
                    <table>
                    <tr>
                      <td><label for="tpass">Passwort</label></td>
                      <td><input type="password" id="tpass" name="tpass" value="" size="40" maxlength="40" /></td>
                    </tr>
                    <tr>
                      <td><label for="tpass2">wiederholen</label></td>
                      <td><input type="password" id="tpass2" name="tpass2" value="" size="40" maxlength="40" /></td>
                    </tr>
                    </table>                   
                    </fieldset>
                <button>Speichern</button>
                </div>
                </fieldset>
            </form>"
Das Problem ist, daß ich keinen Alert bekomme wenn ich verschiedene Passwörter eingebe.
Sieht jemand, warum?
 

merzi86

Erfahrenes Mitglied
#2
Das Problem ist, dass dein Pfad im DOM-Tree nicht Korrekt ist.
Das Element formedit ist kein direktes Kind von document und damit kannst du nicht so darauf zugreifen.
Was Hilft ist die schöne kleine Funktion getElementById.

Die funktionierende Variante ist:
Javascript:
function FormularCheck(){
   var msgStr = '';
   Eingabepw1 = document.getElementById("formedit").tpass.value;
   Eingabepw2 = document.getElementById("formedit").tpass2.value;
   if (Eingabepw1 != Eingabepw2) {msgStr += "  - Das wiederholte Passwort stimmt nicht mit Ihrer ersten Eingabe überein!";}
   if (msgStr.length < 2){ // falls keine Fehlermeldung
      return true;
   } else {
      alert ("Folgende Eingabefelder sind nicht richtig ausgefüllt:\n\n" + msgStr);
      return false;
   }
}
 
#3
Vielen Dank!
Das heisst ich hätte die fieldsets innerhalb und außen um das Formular herum mitzählen müssen? Und jedes Div weiter oben im Baum? Naja dann ist getelementsbyid natürlich einfacher.
 

merzi86

Erfahrenes Mitglied
#4
Ja du musst dich sonst Komplett durch den Baum hangeln.
so z.B.
Javascript:
document.body.weg.durch.alle.divs.zu.formedit.tpass.value
Es ist durch getElementById ist es jedenfalls übersichtlicher, das spätere Refactoring ist einfacher und selbst bei Änderungen des DOM-Trees musst du das Skript nicht gleich anpassen.

Du kannst dir ja auch mal mit console.dir anschauen wie weit du dich durchhangeln müsstest.
Javascript:
console.dir(document);
BTW: man kann das noch soweit einkürzen, das du direkt nach den Eingabefeldern suchst.
Javascript:
...
Eingabepw1 = document.getElementById("tpass").value;
Eingabepw2 = document.getElementById("tpass2").value;
...