Jens: alle Formularfelder erhalten (Syntax), sowie Prüfung

Beitrag lesen

Ich habe im Moment zumindest eine Frage, die ich -auch durch Suche in
selfhtml- nicht beantworten kann.

Wie kan man den Inhalt einer Variablen, deren Bezeichnung in einer
Variablen steht auslesen?

Das Problem stellt sich in der function check() aber auch in der
function check_Menge() wo sich genau die gleiche Frage stellt.
Was muss ich dort schreiben?

Und eine andere Frage (die ich aber vielleicht selber lösen kann),
wie überprüfe ich, ob der Inhalt eines input-Feldes ein gültiges
Datum ist?
Muss ich für jeden Bestandteil des Datums eine Schleife über ein
Array mit den richtigen Werten laufen lassen?

Vielen Dank nochmal für die Hilfe... :-))
Jens

<html><head><title>Test</title>

<script language="JavaScript">

function check()
{
DAT_heute_new=new Date();
DAT_heute_Tag=DAT_heute_new.getDate(); if (DAT_heute_Tag <= 9){DAT_heute_Monat="0"+DAT_heute_Monat}
DAT_heute_Monat=DAT_heute_new.getMonth() + 1;if (DAT_heute_Monat <= 9){DAT_heute_Monat="0"+DAT_heute_Monat}
DAT_heute_Jahr=DAT_heute_new.getYear();
DAT_heute=DAT_heute_Jahr+"-"+DAT_heute_Monat+"-"+DAT_heute_Tag
laenge=document.forms[0].elements.length;
for (i=0; i < laenge; i++) {
name=document.LIEF.elements[i].name;
value_Tag=document.LIEF.elements[i].value;
E_Nummer=name.substring(name.length-1,name.length);
E_Teil=name.substr(0,4);
value_Datum="document.LIEF.DAT_"+E_Nummer+".value";
if (E_Teil == "DAT_" )
  if(value_Tag == ""){
  alert ( "Bitte fuer den "+E_Nummer+".Termin \n ein Datum eingeben!");
  }
else {

/*
hier fängt Überprüfung des Datums an, überprüft wird die richtige Schreibweise

alert (" Testausgabe vom Substring 2,1 = " + value_Datum.substring(0,2));
???? hier soll der Wert der Variablen value_Datum verarbeitet werden, und nicht die Objektbezeichnung !!! ???

if
  (! value_Datum.substring(2,1) == "."
  && ! value_Datum.substring(5,1) == "."
  && ! value_Datum.substring(0,2) ==  ??? hier soll 01-31 rein
  && ! value_Datum.substring(3,2) ==  ??? hier soll 01-12 rein
  && ! value_Datum.substring(6,4) ==  ??? hier soll 2000-2010 rein

){
  alert ("das ist kein Datum, \n bitte geben Sie ein Datum im Format tt.mm.jjjj an");
  }

*/
  DAT_1_Jahr = value_Tag.substr(6,4);
  DAT_1_Monat = value_Tag.substr(3,2);
  DAT_1_Tag = value_Tag.substr(0,2);
  DAT_1 = DAT_1_Jahr + "-" + DAT_1_Monat + "-"+ DAT_1_Tag;
  if (DAT_1 < DAT_heute){
   alert ("Der "+DAT_1_Tag+"."+DAT_1_Monat+"."+DAT_1_Jahr+" ("+E_Nummer+" Termin) ist kleiner als das heutige Datum! \nBitte nutzen Sie ein zukuenftiges Datum!");
   }

}

}  
return false;  

}

function check_Menge()
{
laenge=document.forms[0].elements.length;
for (i=0; i < laenge; i++)
{
name=document.LIEF.elements[i].name;
value_Zahl=document.LIEF.elements[i].value;
value_Zahl = parseInt(value_Zahl);
E_Nummer=name.substring(name.length-1,name.length);
E_Teil=name.substr(0,4);
value_Datum="document.LIEF.DAT_"+E_Nummer+".value";
if (E_Teil == "MNG_"){
  alert("Feldinhalt: " +value_Zahl + " \n Schleife: " + i);
  if(isNaN(value_Zahl) == true){
   alert ( "Bitte fuer den "+E_Nummer+".Termin \n --> "+value_Datum+" <-- \n eine gueltige Menge eingeben!");
   }
  }

}  
return false;  

}

</script>
</head><body>
<form action="Bestell_2.cfm" name="LIEF" onSubmit="return check();">
<INPUT type="text" name="MNG_1" value="0" size="3" maxlength="5"> Stück am (Datum:) <input type="Text" name="DAT_1" value="01.01.2001" size="10" maxlength="10"><br>
<INPUT type="text" name="MNG_2" value="0" size="3" maxlength="5"> Stück am (Datum:) <input type="Text" name="DAT_2" value="01.01.2001" size="10" maxlength="10"><br>
<INPUT type="text" name="MNG_3" value="0" size="3" maxlength="5"> Stück am (Datum:) <input type="Text" name="DAT_3" value="01.01.2001" size="10" maxlength="10"><br>
<input type="submit" name="Absenden">
</form>
</body></html>

Zunächst ersmal vielen Dank, ich werde mich heute mal hinsetzen es ausprobieren.
EN soll nur ein Zähler sein, der alle Elemente im Formular durchzählt. Bei EN ging es um die richtige Syntax, da ich dachte das die falsch sein könnte (EN in... sowie ("document.LIEF." + EN + "."...
Bei function A() ist es ein (Ab- )Schreibfehler beim Zusammenstellen dieser Nachricht, ich wollte mehrere Alternativen Zeigen zeigen.
Nach dem vielen Probieren war es wohl ein wenig zu viel...
Jens

Hi! ;-)

function(A)

Meinst du vielleicht "function A()" ?

{
for(i=0;i<document.Testform.length;++i)

document.forms[0].elements.length

{
  document.write("
Elementname: " + document.forms[0].elements[i].name);
  document.write(", Elementtyp: " + document.forms[0].elements[i].type);
  }
»»  }

Da gibt's nix auszusetzen ;-)

function(B)

Wie oben: function B() !!!

{
  var z = 1;
»»  for (EN in document.LIEF.elements) /* soll alle Elementennummern im Formular LIEF wiedergeben */

Hab noch nie was von EN gelesen, was heisst/macht das ?
Jedenfalls hab ich auch noch nie eine solche for-Schleife gesehen, aber kann ja sein dass es sowas auch gibt, alles ist möglich!

»»  {

if ("document.LIEF." + EN + ".value" == "") /* ist das mit dem EN so richtig? */

wie gesagt, noch nie was von EN gehört!

{ alert ("Fehler!"); }
  else
  { break; }

Hier hört if auf!!!

»»  else

}

Ist also zuviel, gehört weg, ansonsten Syntax error :-(

for(i=0;i<"document.LIEF." + EN + ".value.value.length";++i)

Wieder dieses EN, value.value?? Tippfehler?
Ausserdem fehlt die geschwungene Klammer!!!!

if(document.Formular.Alter.value.charAt(i) < "0" document.Formular.Alter.value.charAt(i) > "9")

  • Zahlen werden ohne Anführungszeichen geschrieben
  • charAt(i) gibt das Zeichen an der Stelle i zurück, kann man also nur prüfen ob == "0" oder != "0", aber < "0" macht hier keinen Sinn!

{ alert ("Fehler!"); }
  }
  z++;
»»  }
}

Probier mal meine Funktion aus:

function C()
{
   laenge=document.forms[0].elements.length;
   for (i=0; i < laenge; i++) {
    alert( "Element "+i+" \n- Name:" +
       document.LIEF.elements[i].name + "\n- Value: " +
       document.LIEF.elements[i].value + "\n- Typ:" +
       document.LIEF.elements[i].type);
   }
   return false;
}

</script>
</head><body>

Frage: es soll erreicht werden:

  1. dass alle MNG_?? - Felder auf eine Zahl ueberprueft werden

Habs ausprobiert, ich hoffe du weisst was damit anzufangen ;-)
»»

  1. das die Datumsfelder in der Zukunft liegen.

Ich weiss nicht 100% aber ich glaub die Funktion heisst getDate()! Das gibt dir das aktuelle Datum, speichere es in eine Variable, zerlege es in Tag, Monat, Jahr, und schreib einfach was grösseres in die Textfelder rein!

</p>
<form action="Bestell_2.cfm" name="LIEF" onSubmit="return C();">
<INPUT type="text" name="MNG_1" value="0" size="3" maxlength="5"> Stück am (Datum:) <input type="Text" name="LIEFDAT_1" value="01.01.00" size="8" maxlength="8">

<INPUT type="text" name="MNG_2" value="0" size="3" maxlength="5"> Stück am (Datum:) <input type="Text" name="LIEFDAT_2" value="01.01.00" size="8" maxlength="8">

<INPUT type="text" name="MNG_3" value="0" size="3" maxlength="5"> Stück am (Datum:) <input type="Text" name="LIEFDAT_3" value="01.01.00" size="8" maxlength="8">

<input type="submit" name="Absenden">
</form>
</body></html>

Ich hoffe ich habe alle Fehler gefunden ;-) und du kannst was mit meiner Funktion anfangen!

liebe Grüsse
Bernhard