jsnew: Zwei alert-Fenster geöffnet

Hallo !
In meinem Formular wird ein fehlerhaftes Feld korrigiert (und zwar wiederum fehlerhaft).
Danach wird der Sendebutton gedrückt.

Bei der Felddefinition (<input ...) wird über onChange die Feldprüfung angestoßen.
Die Betätigung des Sendebuttons löst über "onSubmit" eine Formularprüfung aus.
Die Feldprüfung meldet über ein alert-Fenster den Fehler im Feld und
die Formularprüfung meldet über ein zweites Fenster, dass noch Fehler vorhanden sind.
Wenn die Prüfungen nacheinander ablaufen würden, würde ein alert-Fenster geöffnet und das Programm würde erst weiterlaufen, wenn dieses Fenster geschlossen wird.
In Wirklichkeit erscheinen aber beide Fenster am Bildschirm.
Kann es also sein, dass parallel zwei Prüfungen ablaufen (onchange und onSubmit)? Oder woran könnte es sonst liegen ?
Wie kann man diese ggf. synchronisieren ?
Danke für Eure Unterstützung.

  1. Hallo !

    Zur Erläuterung:
    Ich habe das Script stark vereinfacht. Wenn man in dem Eingabefeld einen Wert eingibt und dann den Senden-Button drückt,
    so gehen zwei alert-Fenster auf. Wenn die Prüfungen nacheinander ablaufen würden, so würde nach meiner Ansicht ein Fenster
    aufgehen und das Programm würde erst weiterlaufen, wenn dieses geschlossen wird.

    <HTML>
    <HEAD>
    <script type="text/javascript" language="JavaScript">
    function formularpruefung(f)
    {
    // .........
    // Fehler
    alert("Felder xyz fehlerhaft")
    return false
    }

    function feldpruefung(feld, mb)
    {
    // .......
    // Fehler
    alert("Betrag fehlerhaft")
    return false
    }
    </script>

    </HEAD>
    <BODY>
    <form action="feedback.pl" method="post" name="formular"
    onSubmit = "return formularpruefung(this)">
    <input name='wert' size='6' type='text' onChange="feldpruefung(this,10)"><br>
    <input name="senden" value="Eingaben senden" type="submit">
    </form>
    </BODY>
    </HTML>

    1. hi,

      Wenn man in dem Eingabefeld einen Wert eingibt und dann den Senden-Button drückt,
      so gehen zwei alert-Fenster auf.

      Das erscheint mir ungewöhnlich - normalerweise blockiert ein alert die weitere Scriptausführung so lange, bis es "weggeklickt" wurde. Welchen Browser verwendest du zum Testen? (Oder meinst du gar nicht gleichzeitig, sondern nacheinander?)

      Warum beim Klicken auf den Sendebutton aber zwei Aktionen ausgelöst werden, ist klar - onChange auf dem Inputfeld feuert erst beim Verlassen dieses Feldes, und das geschieht durch den Klick auf den Submit-Button - und das köst dann auch das Abschicken des Formulars aus, so das onSubmit feuert.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo,

        so gehen zwei alert-Fenster auf.

        Das erscheint mir ungewöhnlich - normalerweise blockiert ein alert die weitere Scriptausführung so lange, bis es "weggeklickt" wurde.

        Das glaubte ich auch, bis mich der FireFox anders belehrte ;-).

        Welchen Browser verwendest du zum Testen?

        Mozilla oder Mozilla FireFox. Beispiel:

          
        <script type="text/javascript">  
        window.setTimeout("alert('Hallo2')", 2000);  
        window.setTimeout("alert('Hallo3')", 4000);  
        alert("Hallo1");  
        </script>  
        
        

        Nach 4s sollte die AlertBox "Hallo3" im Vordergrund stehen. Du kannst dann die drei AlertBoxen über ihre Titelleisten auf dem Bildschirm nebeneinander ziehen.

        viele Grüße

        Axel

        1. hi,

          Das erscheint mir ungewöhnlich - normalerweise blockiert ein alert die weitere Scriptausführung so lange, bis es "weggeklickt" wurde.
          Das glaubte ich auch, bis mich der FireFox anders belehrte ;-).

          Bei Aufruf über Timeouts wie in deinem Beispiel, oder über Events wie beim OP, scheint mir dieses Verhalten auch noch bis zu einem gewissen Grad nachvollziehbar.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hallo,
            ich habe jetzt folgendes festgestellt:
            Im Microsoft IE und im Opera-Browser verhält es sich so wie ich es (fast) erwartet hätte:
            Es wird die Feldprüfung ausgeführt, die Betätigung des Sende-Buttons wird ignoriert. Noch schöner wäre es, wenn die Sendefunktion danach ausgeführt würde.
            In Netscape und Mozilla Firefox ist es wie ursprünglich beschrieben, d. h. dort ist es dadurch möglich, fehlerhafte Felder abzusenden siehe nachfolgendes Beispiel:

            <HTML>
            <HEAD>

            <script type="text/javascript" language="JavaScript">

            function formularpruefung(f)
               {
            // .........
            // keine Fehler erkannt, da die Feldänderung/Feldprüfung noch nicht
            // erfolgt ist !!!!!!!!!!!!!!!!!!
                return true

            }

            function feldpruefung(feld, mb)
               {
            // .......
            //   Fehler
                alert("Betrag fehlerhaft: " + formular.wert.value)
                return false

            }
            </script>

            </HEAD>
            <BODY>

            <form action="feedback.pl" method="post" name="formular"
                  onSubmit = "return formularpruefung(this)">

            <input name='wert' size='6' type='text' onChange="feldpruefung(this,10)"><br>
            <input name="senden" value="Eingaben senden" type="submit">
            </form>

            </BODY>
            </HTML>

            1. Hallo,

              Im Microsoft IE und im Opera-Browser verhält es sich so wie ich es (fast) erwartet hätte:
              Es wird die Feldprüfung ausgeführt, die Betätigung des Sende-Buttons wird ignoriert. Noch schöner wäre es, wenn die Sendefunktion danach ausgeführt würde.

              Ja, weil in diesen Browsern die AlertBox den Programmablauf unterbricht und dann das Klick-Ereignis konsumiert.

              In Netscape und Mozilla Firefox ist es wie ursprünglich beschrieben,

              Ja, weil in diesen Browsern das Programm trotz AlertBox weiterläuft.

              d. h. dort ist es dadurch möglich, fehlerhafte Felder abzusenden siehe nachfolgendes Beispiel:

              Warum prüfst Du überhaupt jedes Feld einzeln onchange? Führe doch _eine_ Prüfroutine FORM.obsubmit aus, wie z.B. in http://de.selfhtml.org/javascript/beispiele/formulareingaben.htm beschrieben.

              Wenn Du irgendetwas INPUT.onchange prüfen und dem Nutzer anzeigen willst, dann darfst Du halt maximal z.B. den Feldhintergrund rot einfärben, wenn ein falscher Wert eingegeben wurde.

              btw.: Deine Rückgabewerte in den Funktionen sind unwirksam, so wie Du die Funktionen aufrufst. Damit sie in onchange und onsubmit wirksam werden, müsstest Du die Funktionen so:

              onchange="return meineFunktion();"
              onsubmit="return meineFunktion();"

              aufrufen. Allerdings würde dann ein onchange="return false;" sicher nicht das tun, was Du erwünscht hast ;-).

              viele Grüße

              Axel

              1. Hallo Axel,

                Ja, weil in diesen Browsern das Programm trotz AlertBox weiterläuft.

                Das ist ja seltsam ! Aber das ist wohl die Internet-Welt !

                Warum prüfst Du überhaupt jedes Feld einzeln onchange? Führe doch _eine_ Prüfroutine FORM.obsubmit aus, wie z.B. in http://de.selfhtml.org/javascript/beispiele/formulareingaben.htm beschrieben.

                Ich persönlich will lieber zeitnahe auf einen Fehler hingewiesen werden und nicht nach kompletten Ausfüllen eine Latte von Meldungen erhalten. Aber das ist wohl Geschmacksache.
                Ich werde wohl Deinen Rat befolgen und alle Prüfungen erst beim Submit durchführen.

                Vielen Dank für Deine kompetente Auskunft!

                1. Hallo,

                  Ja, weil in diesen Browsern das Programm trotz AlertBox weiterläuft.
                  Das ist ja seltsam ! Aber das ist wohl die Internet-Welt !

                  Willkommen in uns'rer Welt! ;-)
                  Ja, das ist ein Nachteil, wenn mehrere Wettbewerber sich den Markt für Web-Browser teilen und die vorhandenen Standards unterschiedlich auslegen oder teilweise auch gar nicht beachten. Die Vorteile des Wettbewerbs überwiegen aber.

                  Ich persönlich will lieber zeitnahe auf einen Fehler hingewiesen werden und nicht nach kompletten Ausfüllen eine Latte von Meldungen erhalten. Aber das ist wohl Geschmacksache.

                  Ja, dann prüfe INPUT.onchange den eingegebenen Wert und mache den Feldhintergrund grün bei richtiger Eingabe und rot bei falscher Eingabe. Diesen Hinweis sollte jeder Nutzer auch ohne lange Erklärung verstehen. Lässt er rote Felder trotzdem unverändert, dann muss er halt mit der "Latte von Meldungen" beim Submit leben.

                  viele Grüße

                  Axel