Schenkeli Thomas: Endlosschleife durch onBlur-Event

Hallo,

ich habe folgende Ausgangssituation mit der ich absolut nicht glücklich bin, aber eine Anpassung dieses Verhaltens in der gesamten Applikation ist im Moment leider nicht möglich:

Zwei Inputfelder, bei denen auf das onBlur-Event (also beim Verlassen) ein Check durchgeführt wird, ob der Inhalt korrekt ist. Ist der Inhalt nicht korrekt, wird ein Alert-Fenster angezeigt und wieder das selbe Inputfeld fokusiert.

Das funktioniert auch ganz toll, solange man nicht aus dem einen Inputfeld heraus ein anderes Inputfeld mit ebenfalls "fehlerhaftem" Inhalt selektiert. Denn dann passiert folgendes:

  1. Inputfeld A verliert Fokus
    2)(?) Inputfeld B gewinnt Fokus
    3)(?) onBlur von Inputfeld A wird ausgeführt: Alert wird gezeigt und Inputfeld A wird fokusiert.
  2. Durch die Fokusierung von Inputfeld A verliert Inputfeld B den Fokus, also wird das onBlur Event von Inputfeld B ausgeführt
  3. Daher wird eine alertmessage gezeigt und Inputfeld B fokusiert

Und dann gehts immer so weiter ...

Das Ganze passiert aber nur unter IE, Firefox scheint die Events in einer anderen Reihenfolge abzuarbeiten, weshalb es zu keinerlei Endlosschleife kommt. Hat jemand eine Idee was ich tun könnte um das selbe ohne Endlosschleife zu erreichen?

Dass der Lösungsansatz alles andere als ideal ist, ist mir klar und ich würde auch lieber jedes Inputfeld erst beim Speichern überprüfen um erstens den EBnutzerkomfort zu heben und zweitens solche Komplikationen zu vermeiden. Aber ein Redesign dieser Funktion ist im Moment aber eben leider nicht möglich

Danke für eure Hilfe

Thomas

  1. hi,

    1. Durch die Fokusierung von Inputfeld A verliert Inputfeld B den Fokus, also wird das onBlur Event von Inputfeld B ausgeführt
    2. Daher wird eine alertmessage gezeigt und Inputfeld B fokusiert

    Und dann gehts immer so weiter ...

    onBlur durch onChange ersetzen?

    gruß,
    wahsaga

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

      onBlur durch onChange ersetzen?

      Wird wohl nicht helfen.

      Folgendes Szenario:

      • Benutzer gibt falschen Wert ein
      • verlässt nun das Inputfeld
      • klickt die Alertbox weg
      • verlässt das Inputfeld erneut ohne etwas zu ändern
        -> falscher Wert im Inputfeld und trotzdem kein Alert

      Dass der Firefox Alertboxen im onBlur nicht mag hab ich glaub ich auch schon mal erwähnt, oder? (Es geht um Taskwechsel während der Cursor in einem Inputfeld mit falschen Wert steht. Dass die Alertbox den Fokusverlust des FF-Fensters verhindert bekommt der Fuchs irgendwie nicht auf die Reihe...)

      Gruß,

      Harlequin

  2. Vielleicht so:

    (schematisch)

    if(infofelda=falsch&&schonblured!=true) // fragen ob inhalt falsch ist und ob nicht vorher schon gewechselt wurde.
    schonblured = true // als globale Variable definieren
    infofelda.focus() // Focus setzen
    else
    schonblured = false

    :)

    MFG
    Griever

    1. Hallo Griever.

      if(infofelda=falsch&&schonblured!=true) // fragen ob inhalt falsch ist und ob nicht vorher schon gewechselt wurde.

      = != ==

      Griever

      BTW: Was ist eigentlich aus Safari geworden?

      Einen schönen Mittwoch noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]