Roland: Formularüberprüfung mit focus() hängt sich auf

Hallo Leute,

rufe u. a. folgendes Script im body mit onblur auf.
Sobald im aktuellem Feld (Feld ist mit Text vorbelegt) aber der Inhalt gelöscht wird und man mit "TAB" oder der Mause das Feld verlässt, hängt sich Mozilla, IE und Firefox auf.

function CheckStrasse (Feld) {
  if (Feld == "") {
    document.forms[0].IFSTRASSE.focus();
    document.forms[0].IFSTRASSE.style.backgroundColor = "#FF0000";
    return false;

}
    if (Feld !="") {
    document.forms[0].IFSTRASSE.style.backgroundColor = "#FFFFFF";
    return true
  }
}

Hat jemande eine Idee,wo ich den Fehler verbaut habe?

Gruß und Danke

  1. Moin!

    Wild spekuliert: Wenn Du onblur() verwendest, und darin focus() aufrufst, trittst Du damit nicht gleichzeitig ein blur-event los...?

    -- Skeeve

    1. Hallo Skeeve,

      entschuldige bitte, aber was ist ein blur-event?
      Hört sich zumindes interessant an.
      Meine Vermutung geht in die Richtung "Endlos-Schleife", da der FF oder IE im System dann mit 99% läuft.

      Gruß und Danke für Deine schnelle Antwort

      Roland

      1. Moin!

        Hallo Skeeve,

        entschuldige bitte, aber was ist ein blur-event?

        Das, was den Aufruf von onblur-funktionen initiiert.

        Meine Vermutung geht in die Richtung "Endlos-Schleife", da der FF oder IE im System dann mit 99% läuft.

        Das wäre dann eine Endlosschleife.

        Ein blur event ruft deine Funktion auf. Die macht ein focus() und damit wird gleichzeitig ein anderes element "geblurt". Also entsteht ein neues blur event und Deine Funktion wird aufgerufen.

        -- Skeeve

        1. Hi nochmal und danke für Deine Infos.

          Wie stelle ich es aber am geschicktesten an, dass ich ein Feld beim verlassen überprüfen kann (ob gefüllt, ob mit Zahlen usw.) und gleichzeit (oder so) der Focus in das falsche Feld gesetz wird.

          Gruß und nochmals herzlichen Dank

          Roland

          1. Moin!

            Hi nochmal und danke für Deine Infos.

            Wie stelle ich es aber am geschicktesten an, dass ich ein Feld beim verlassen überprüfen kann

            onchange. Wenn sich nichts geändert hat, ist im Normalfall auch nichts zu prüfen, wenn die Daten zuvor okay waren.

            -- Skeeve

            1. Hallo, ich bins schon wieder,

              onchange scheint für mich nicht so gut geeignet.
              Will mal schildern, was ich die ganze Zeit versuche:

              Formulareingabe - beim Verlassen - überprüfen (leer, Zahl, usw) - wenn Fehler -> farbig hinterlegen und "falschen Wert" löschen (alles ohne alerts, wenn möglich, da umständlich für Benutzer (Vorgabe!).

              Kannst Du mir da bitte noch den ein oder anderen Tipp geben?

              Gruß und Danke

              Roland

              1. Moin!

                onchange scheint für mich nicht so gut geeignet.

                Warum nicht?

                Formulareingabe - beim Verlassen - überprüfen (leer, Zahl, usw) - wenn Fehler -> farbig hinterlegen und "falschen Wert" löschen (alles ohne alerts, wenn möglich, da umständlich für Benutzer (Vorgabe!).

                Das kannst Du doch auch mit onchange.

                Okay... Wenn Du ein leeres Feld unverändert verläßt, es aber gefüllt sein sollte, dann bekommst Du da keine (neue) markierung, daß was nicht stimmt.

                Andererseits ist das, denke ich, auch nicht dramatisch, wenn Du einen onsubmit handler hast, der alle Felder ebenfalls überprüft.

                -- Skeeve

              2. Moin!

                So... Ich habe mir jetzt mal eine Beispiel Seite gebastelt.

                Was ich ursprünglich vermutet hatte, ist wohl nicht der Fall. Also der Aufruf von focus() löst wohl doch kein blur event aus.

                Der Fehler muß also woanders liegen. Läßt sich aber schwer sagen, wenn man keinen Source zur Verfügung hat.

                <html>  
                 <head>  
                  <title></title>  
                  <script type="text/javascript">
                
                  
                   function blurred(me) {  
                    me.value= "blurred";  
                    me.focus();  
                    return false;  
                   }  
                   function focused(me) {  
                    me.value= "focused";  
                    return false;  
                   }  
                  
                
                </script>  
                 </head>  
                 <body>  
                  <form action="">  
                   <input type="text" onblur="blurred(this)" onfocus="focused(this)" value="nix"           /><br/>  
                   <input type="text" onblur="blurred(this)" onfocus="focused(this)" value="gar nix"       /><br/>  
                   <input type="text" onblur="blurred(this)" onfocus="focused(this)" value="ueberhaupt nix"/><br/>  
                   <input type="text" value="kein handler"/>  
                  </form>  
                 </body>  
                </html>
                

                -- Skeeve

          2. Moin!

            Wie stelle ich es aber am geschicktesten an, dass ich ein Feld beim verlassen überprüfen kann (ob gefüllt, ob mit Zahlen usw.) und gleichzeit (oder so) der Focus in das falsche Feld gesetz wird.

            onblur für das Feld, nicht für das gesamte Dokument, nutzen. Und dann selektiv auch nur das eine Feld prüfen, nicht das gesamte Formular.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. Hallo Sven,

              mach ich das denn nicht?
              function CheckBezirk (Feld) {
                if (Feld == "") {
                  document.forms[0].IFBEZINSP.style.backgroundColor = "#FF0000";
                  document.forms[0].IFBEZINSP.focus();
                  return false;
                }
                  var chkZ = 1;
                  for (i = 0; i < document.forms[0].IFBEZINSP.value.length; ++i)
                  if (document.forms[0].IFBEZINSP.value.charAt(i) < "0" ||
                      document.forms[0].IFBEZINSP.value.charAt(i) > "9")
                    chkZ = -1;
                  if (chkZ == -1) {
                  document.forms[0].IFBEZINSP.value="";
                  document.forms[0].IFBEZINSP.style.backgroundColor = "#FF0000";
                  document.forms[0].IFBEZINSP.focus();
                  return false;
                }
                  if (chkZ == 1) {
                  document.forms[0].IFBEZINSP.style.backgroundColor = "#FFFFFF";
                  }
              }

              Aufruf:
              ...
              <INPUT TYPE="TEXT" NAME="IFBEZINSP" onblur ="CheckBezirk(this.value)" MAXLENGTH="2" SIZE="10"                 VALUE="$BEZINSP$" ID="IFBEZINSP"></TD>

              Gruß und Danke

              Roland

              1. Moin!

                Da ließe sich noch was optimieren:

                function CheckBezirk (Feld) {
                  if (Feld.value == "") {
                     Feld.style.backgroundColor = "#FF0000";
                     Feld.focus();
                     return false;
                  }
                  var chkZ = 1;
                  for (i = 0; i < Feld.value.length; ++i)
                    if (Feld.value.charAt(i) < "0" ||
                      Feld.value.charAt(i) > "9")
                      chkZ = -1;
                    if (chkZ == -1) {
                     Feld.value="";
                     Feld.style.backgroundColor = "#FF0000";
                     Feld.focus();
                     return false;
                   }
                   if (chkZ == 1) {
                     Feld.style.backgroundColor = "#FFFFFF";
                   }
                }
                <INPUT TYPE="TEXT" NAME="IFBEZINSP" onchange ="CheckBezirk(this)" MAXLENGTH="2" SIZE="10"                 VALUE="$BEZINSP$" ID="IFBEZINSP"></TD>

                Du übergibst also das input element und mußt es Dir dann nicht in der Funktion ständig über document.forms[0]... "suchen".

                -- Skeeve

              2. Moin!

                mach ich das denn nicht?

                Wenn du schreibst "rufe u. a. folgendes Script im body mit onblur auf." - dann gehe ich davon aus, dass du <body onblur="script"> gemacht hast.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Ok, mein Fehler.
                  Entschuldige bitte.

                  Aufruf:
                  <INPUT TYPE="TEXT" NAME="IFBEZINSP" onblur ="CheckBezirk(this)" MAXLENGTH="2" SIZE="10" VALUE="$BEZINSP$" ID="IFBEZINSP"></TD>

                  Gruß

                  Roland

      2. Hi,

        Meine Vermutung geht in die Richtung "Endlos-Schleife", da der FF oder IE im System dann mit 99% läuft.

        bei onfocus im formular-element feuert body onblur.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
  2. hi,

    rufe u. a. folgendes Script im body mit onblur auf.
    Sobald im aktuellem Feld (Feld ist mit Text vorbelegt) aber der Inhalt gelöscht wird und man mit "TAB" oder der Mause das Feld verlässt, hängt sich Mozilla, IE und Firefox auf.

    Rufe die focus-Methode minimal zeitverzögert auf:
    http://forum.de.selfhtml.org/archiv/2006/7/t133147/#m862405

    gruß,
    wahsaga

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