Formularüberprüfung mit Javaschript ohne Popup

Danke für den Hinweis das ...innerHTML nur vom IE verstanden wird. Aber nun bin ich wieder am Anfang und weiß jetzt gar nicht mehr, wie ich das Formular bearbeiten/verarbeiten soll.
Kann mir jemand mit einem Script weiterhelfen, daß nicht nur vom IE verstanden wird?

Viele Grüße und Danke!

Virtuallunas
 
Wenn Du ein paar Tage Geduld hast und/oder hier jemand anderer sich noch dafür bereit erklärt ja.

Ich könnte frühestens gegen Ende der Woche.
 
Hallo!
Zeit habe ich! Sitze schließlich schon 4 Wochen an der Seite! :-(
Habe die ganze Zeit gesucht, aber halt nicht die perfekte Lösung gefunden und mich nun hoffend hier ins Forum getraut!
Wäre super, wenn mir jemand weiterhelfen könnte! :)

Viele Grüße
Virtuallunas
 
Original geschrieben von fatalus
Hallo...

"innerHTML" verstehen auch Mozilla und Opera7 ;)

Sicher? Ein Test bei mir lokal im Mozilla Firebird funktionierte nicht.

( Brauche das derzeit für eine lokale Seite im Intranet )

Ich hatte hier nämlich lokal was getestet und bin dann eher auf Zufall ( Suche == Recherche ) auf diesen Thread gestossen!
 
Ich kann es nicht sagen, da ich nur den IE habe.
Es wäre aber echt super, wenn mir hier jemand weiterhelfen kann und mein Problem lösen kann. Ich habe Euch meine Codes zur Verfügung gestellt, mehr kann ich als Newbie nicht tun...
Falls mir hier keiner helfen kann, weiß ich auch nicht mehr weiter

Bitte
Virtuallunas
 
Doch, bei mir hat innerHTML im Opera, Mozilla und Netscape auch funktioniert. Ich schau mir deinen Code mal etwas genauer an...

Keine Ahnung, wie lange das dauert, hab einfach bisschen Geduld :)
 
Ich hab da mal rumprobiert.... angesichts der Vielzahl der Prüfkriterien und Fehlermeldungen bin ich der Ansicht, dass sich da Arrays gut machen würden.
Es mag auf den ersten Blick verwirrend aussehen, ist es aber nicht:)
Es werden in den Arrays reguläre Ausdrücke und die dazu passenden Fehlermeldungen gespeichert...dadurch schwillt das Skript nicht bei jedem Prüfkriterium um ein paar Zeilen an.

Der Einfachheit halber haben die Arrays als Namen die Namen der entsprechenden Formularfelder.
Bei den Brausern, welche innerHTML verstehen, wirds in der Seite ausgegeben, bei den anderen als alert....
da für jede einzelne Fehlermeldung einen Layerhineinzupacken halt ich für wenig erstrebenswert... das wären beim derzeitigen Stand 40-50 Stück.
Code:
<html>
<head>
<title>test</title>
<script type="text/javascript">
<!--

fields=new Array();
errors=new Array()
fields['user']=new Array(/\S/,/.{5,}/,/^\w+$/i);
errors['user']=new Array('gewünschten Benutzernamen eingeben!','mindestens 5 Zeichen!','keine Sonderzeichen!');
fields['vorname']=new Array(/\S/,/.{3,}/,/^\D+$/);
errors['vorname']=new Array('Nachnamen eingeben!','kompletten Vornamen!','keine Zahlen!');
fields['name']=new Array(/\S/,/.{5,}/,/^\D+$/);
errors['name']=new Array('Vornamen eingeben!','kompletten Nachnamen!','keine Zahlen!');
fields['strasse']=new Array(/\S/,/.{5,}/,/^[\w\-\.]+$/);
errors['strasse']=new Array('Ihre Strasse eingeben!','kompletten Straßennamen!','keine Zahlen!');
fields['hausnummer']=new Array(/\S/,/^[a-z0-9]+$/i);
errors['hausnummer']=new Array('Ihre Hausnummer eingeben!','Ihre Hausnummer eingeben!');
fields['plz']=new Array(/\S/,/^\d+$/i);
errors['plz']=new Array('Ihre PLZ eingeben!','Ihre PLZ eingeben!');
fields['wohnort']=new Array(/\S/,/.{3,}/);
errors['wohnort']=new Array('Ihren Wohnort eingeben!','kompletten Wohnort!');
fields['land']=new Array('0');
errors['land']=new Array('ein Land auswählen!');
fields['email']=new Array(/\S/,/^[a-zA-Z0-9_\.-]{2,}@[a-z0-9-]{3,}\.([a-z]{2,4}|museum)$/i);
errors['email']=new Array('Ihre E-Mail-Adresse eingeben!','Ihre gültige E-Mail-Adresse eingeben!');
fields['tag']=new Array('0');
errors['tag']=new Array('Ihren Geburtstag wählen!<br>');
fields['monat']=new Array('0');
errors['monat']=new Array('Ihren Geburtsmonat wählen!<br>');
fields['jahr']=new Array(/\S/,/^(19|20)\d\d$/i);
errors['jahr']=new Array('Ihre Geburtsjahr eingeben!','Ihre Geburtsjahr eingeben!');


IE=document.all&&!window.opera;
DOM=!IE&&document.getElementsByTagName&&document.getElementsByTagName('title')[0].innerHTML;
XXX=(!DOM&&!IE);


function chkanmeldung(frm)
{
isError=false;
for(var f in fields)
    {
    for(i=0;i<fields[f].length;++i)
        {
        eMsg='';
        if(i==0&&fields[f][i]=='0'){if(frm.elements[f].selectedIndex==0){eMsg='Bitte '+errors[f][i];}}
        else if(!String(frm.elements[f].value).match(fields[f][i])){eMsg='Bitte '+errors[f][i];}
        if(XXX&&eMsg!=''){alert(eMsg.replace(/<br>/,''));frm.elements[f].focus();return false;}
        else if(!XXX)
            {
            if(DOM){document.getElementById('err_'+f).innerHTML=eMsg;}
            else if(IE){eval('document.all.err_'+f+'.innerHTML="'+eMsg+'";');}
            if(eMsg!=''){isError=(!isError)?frm.elements[f]:isError;break;}
            }
        }
    }
if(isError){isError.focus();return false;}
return true;
}
//-->
</script>
<style type="text/css">
<!--
.err{font-size:10px;color:#ff0000;}
input,select{font:11px Arial,Tahoma,Geneva,Sans-Serif;}
-->
</style>
</head>
<body>
<form name="anmeldung" method="POST" action="mailer.php" onSubmit="return chkanmeldung(this)">
 <div align="center">
  <table border="0" cellpadding="0" cellspacing="0" >
   <tr>
    <td height="35" width="120"><b>Benutzername*</b></td>
    <td height="35"><input type="text" name="user" size="20" maxlength="15"></td>
    <td height="35"><span id="err_user"class="err"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Vorname*</b></td>
    <td height="35"><input type="text" name="vorname" size="20"></td>
    <td height="35"><span id="err_vorname"class="err"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Name*</b></td>
    <td height="35"><input type="text" name="name" size="20"></td>
    <td height="35"><span id="err_name"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Strasse*</b></td>
    <td height="35"><input type="text" name="strasse" size="20"></td>
    <td height="35"><span id="err_strasse"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Hausnummer*</b></td>
    <td height="35"><input type="text" name="hausnummer" size="20" maxlength="4">
    <td height="35"><span id="err_hausnummer"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>PLZ*</b></td>
    <td height="35"><input type="text" name="plz" size="20" maxlength="6"></td>
    <td height="35"><span id="err_plz"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Wohnort*</b></td>
    <td height="35"><input type="text" name="wohnort" size="20"></td>
    <td height="35"><span id="err_wohnort"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Land*</b></td>
    <td height="35">
     <select name="land">
      <option selected>Bitte ausw&auml;hlen</option>
      <option value="Deutschland">Deutschland</option>
     </select>
    </td>
    <td height="35"><span id="err_land"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Emailadresse*</b></td>
    <td height="35"><input type="text" name="email" size="20"></td>
    <td height="35"><span id="err_email"class="err"></span></td>
   </tr>
   <tr>
    <td height="35" width="120"><b>Geburtsdatum*</b></td>
     <td height="35">
      <select name="tag">
       <option selected>Tag</option>
       <option>01</option>
      </select>
      <select name="monat">
       <option selected>Monat</option>
       <option>01</option>
      </select>
      <input name="jahr"size="4"maxlength="4"value="Jahr">
     </td>
     <td height="35"><span id="err_tag"class="err"></span><span id="err_monat"class="err"></span><span id="err_jahr"class="err"></span></td>
    </tr>
    <tr>
     <td height="35" width="120"><b>eigene Webseite?</b></td>
     <td height="35"><input type="text" name="Webseite" size="20" value="www.deine-seite.de"></td>
     <td height="35"></td>
    </tr>
    <tr>
     <td colspan="3"align="center">
      <input type="submit" value="Abschicken" title="submit">
      <input type="reset" value="Löschen" title="löschen">
     </td>
    </tr>
   </table>
  </div>
 </form>
</body>
</html>
Der Aufbau der Arrays ist wie schon erwähnt:

fields[feldname]=new Array(Regexp1,Regexp1,Regexp1,usw);
errors[feldname]=new Array(Fehler1,Fehler2,Fehler3,usw);

wie viele Prüfkriterien angegeben werden, spielt keine Rolle.
ein Sonderfall sind die <select>'s, da wird statt einer RegExp lediglich:

fields[selectName]=new Array('0');
..geschrieben(die Fehlermeldung dazu wie gehabt)

Die Fehlermeldung erscheint dabei in <span>'s statt <div>'s,.... <div>'s erzeugen einen neuen Absatz, auch wenn sie leer sind...
ich glaub, das war dein Problem, als die Zellen anschwellten, obwohl nix drinnen stand.

Die <span>'s heissen haben als ID immer den Namen des entsprechenden Formularfeldes...mit vorangestelltem "err_"
 
Zuletzt bearbeitet:
Original geschrieben von split
Doch, bei mir hat innerHTML im Opera, Mozilla und Netscape auch funktioniert. Ich schau mir deinen Code mal etwas genauer an...

Keine Ahnung, wie lange das dauert, hab einfach bisschen Geduld :)

Dann sei mein ******* FireBird verflucht bis zurück in die Steinzeit, weil mir funktioniert es nicht!
 
Mein Firebird macht das auch....vielleicht hast du nur ne schlechte Mischung erwischt....da kommen ja täglich Dutzende Builds raus:)
meiner ist [1.4b: 2003051616]
 

Neue Beiträge

Zurück