joah.: Formularvalidierung hoch joah :)

Hi!
Ich habe 'ne Javascript Funktion die beim Bearbeiten und Verlassen von Elementen der Form aufgerufen wird und je nach dem wenn die Felder ausgefüllt sind, soll der Submit Button disabled werden oder nicht.

Von der Grundidee funktioniert es, ich habe für jedes einzelne Element eine eigene if-Abfrage gesetzt, ich habe aber auf der Seite deutlich über 50 Felder, daher wollte ich die Feldnamen in ein array schieben und so durch das array laufen und die felder prüfen...

anstatt des wertes des arrays bekomme ich allerdings im source code immer den namen des arrays... hat jemand eine idee, woran das liegt?

danke für eure hilfe!

joah.

=====

function validate_form() {

submit = true;

fieldsToBeChecked = new Array("ueberschrift","titel","username","passwort");

for (var i=0; i < fieldsToBeChecked.length; ++i) {
 if (document.form.+fieldsToBeChecked[i]+ && document.form.+fieldsToBeChecked[i]+.value.length==0) {
  submit = false;
  }
  }

if (submit) {
   document.form.submit.disabled=false;
  } else {
   document.form.submit.disabled=true;
  }
}

  1. hi,

    anstatt des wertes des arrays bekomme ich allerdings im source code immer den namen des arrays... hat jemand eine idee, woran das liegt?

    fieldsToBeChecked = new Array("ueberschrift","titel","username","passwort");

    for (var i=0; i < fieldsToBeChecked.length; ++i) {
    if (document.form.+fieldsToBeChecked[i]+ && document.form.+fieldsToBeChecked[i]+.value.length==0) {
      submit = false;

    fieldsToBeChecked[i] enthält an dieser stelle logischerweise nur die literale "ueberschrift", "titel", etc. - du hast doch wohl nicht etwa etwas anderes erwartet?

    schau dir http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines an, und berücksichtige, dass dort für # auch der name eines elements eingesetzt werden kann.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. fieldsToBeChecked = new Array("ueberschrift","titel","username","passwort");

      for (var i=0; i < fieldsToBeChecked.length; ++i) {
      if (document.form.+fieldsToBeChecked[i]+ && document.form.+fieldsToBeChecked[i]+.value.length==0) {
        submit = false;

      fieldsToBeChecked[i] enthält an dieser stelle logischerweise nur die literale "ueberschrift", "titel", etc. - du hast doch wohl nicht etwa etwas anderes erwartet?

      schau dir http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines an, und berücksichtige, dass dort für # auch der name eines elements eingesetzt werden kann.

      freu mich immer von wahsaga etwas zu lesen, steh leider grad total auf dem schlauch, heisst das ich muß das literal in einen string umändern? wie gehts das? *HIIIILFE*

      danke.

      joah.

      1. if (document.form.elements['fieldsToBeChecked[i]'] && document.form.elements['fieldsToBeChecked[i]'].value.length==0) {
          submit = false;
          }

        so in der art? funktioniert leider auch nicht :(((((((((((((((((

        joah.

        1. hi,

          if (document.form.elements['fieldsToBeChecked[i]'] && document.form.elements['fieldsToBeChecked[i]'].value.length==0) {
            submit = false;
            }

          so in der art?

          nein, jetzt hast du ja einen string notiert, wo du eigentlich den wert der array-variablen meintest.

          document.form.elements[fieldsToBeChecked[i]]

          gruß,
          wahsaga

          --
          "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
          1. nein, jetzt hast du ja einen string notiert, wo du eigentlich den wert der array-variablen meintest.

            document.form.elements[fieldsToBeChecked[i]]

            gruß,
            wahsaga

            Ich küsse dir deine Füsse... Ich hatte das zwar eben auch so probiert, da ging es nicht... Es funktioniert! Du bist ein Javascript Gott ;)

            Danke für deine Hilfe!

            joah.

            1. Ich küsse dir deine Füsse...

              na, wer wird denn gleich..

  2. Hallo joha,

    versuche es mal mit eval:
    http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#eval

    Anstatt:
    document.form.+fieldsToBeChecked[i]+.value.length

    Lieber:
    var field = eval( "document.form." + chkfieldsToBeChecked[i] )
    field.value.length

    Gruß
    Helmut Weber

    --
    -------------------------------------------
    Mode ist eine Variable, Stil eine Konstante
    1. Hi!

      Anstatt:
      document.form.+fieldsToBeChecked[i]+.value.length

      Lieber:
      var field = eval( "document.form." + chkfieldsToBeChecked[i] )
      field.value.length

      Funktioniert nicht:
      Fehlermeldung "OBjekt erwartet "?

      function validate_form() {
        // body onload immer in load.php ?

      submit = true;

      fieldsToBeChecked = new Array("username","passwort");

      for (var i=0; i < fieldsToBeChecked.length; ++i) {

      var field = eval( "document.form." + chkfieldsToBeChecked[i] )
       if (field && field.value.length==0) {
        submit = false;
        }
        }

      if (submit) {
         document.form.submit.disabled=false;
        } else {
         document.form.submit.disabled=true;
        }
      }

      ===============

      Seufz,
      joah.

      1. Hallo joah,

        Auszug aus SELFHTML: "Mit dem Objekt elements, das in der JavaScript-Objekthierarchie unterhalb des forms-Objekts liegt, haben Sie Zugriff auf Elemente eines Formulars."

        Daher durchlaufe doch alle Elemente nach belieben mit for() oder while()!

        Gruß aus Berlin!
        eddi