Andi: Zusammenspiel mehrerer Event-Handler

Ich knüpfe an ein vorheriges Problem an:

Mit onmouseover und onmouseout weise ich Textfeldern dynamisch andere Stylesheets zu.
Bei einem onclick, also wenn ein Textfeld den Focus erhält, sollte onmouseout nicht mehr angewendet werden.
Erst wenn es den Focus wieder verliert soll das Stylesheet wieder geändert werden.
Oder anders gesagt: das Textfeld soll während der Eingabe einen CSS-Stil behalten und nicht auf onmouseout reagieren.

Das ganze wäre recht einfach mit einer Bedingung zu lösen, wenn es eine Eigenschaft hasFocus (oder so ähnlich) geben würde. Ich habe aber nichts entsprechendes gefunden.

Habt ihr eine Idee für mich?

Gruß
Andi

  1. Benutz einfach bei onfocus dasselbe wie bei onmouseover und bei onblur dasselbe wie bei onmouseout. Hat nebenbei den Vorteil, dass das auch bei Tabulator-Steuerung funktioniert

    1. Benutz einfach bei onfocus dasselbe wie bei onmouseover und bei onblur dasselbe wie bei onmouseout. Hat nebenbei den Vorteil, dass das auch bei Tabulator-Steuerung funktioniert

      Daran hatte ich auch schon gedacht. Wenn ich allerdings nur onfocus und onblur verwende, fehlt mir allerdings der mouseover-Effekt, den ich wirklich nicht verlieren möchte. Verwende ich alle vier, geht hingegen focus und blur verloren.

      1. Hi,

        Eine Möglichkeit wäre, dass du die Ausführung der Eventhandler durch eine zusätzliche (globale) Steuervariable beeinflusst. Also etwa (Skizze):

        do_mouse_out_action = false;

        Im onmouseover-Eventhandler steht dann zusätzlich folgende Anweisung:

        ...
        do_mouse_out_action = true;
        ...

        Und die Anweisungen im onmouseout-Eventhandler steuerst du über den Wert dieser Variablen:

        ...

        if (do_mouse_out_action)  
        {  
          [normaler Ablauf]  
          do_mouse_out_action = false;  
        }
        

        ...

        Jetzt musst du nur noch dafür sorgen, dass im _onclick_-Eventhandler der Wert dieser Variablen auf false gesetzt wird; dann wird auch die 'mouse-out-Action' nicht ausgeführt.

        Theoretisch müsste das Funktionieren; praktisch könnten sich Probleme ergeben, wenn die Bereiche und Ereignisse sehr nahe beieinanderliegen; da wirst du ggf. etwas rumprobieren müssen.

        Freundliche Grüße,
        Sancho

        1. Das klingt wirklich gut. Ich werde das so umsetzen.
          Ich hatte gerade so etwas ähnliches ausprobiert, in dem ich dynamisch eine id (activated) zugewiesen habe. Diese Lösung reagierte aber zumindest im Konqueror ein bischen langsam.

          Vielen Dank für Deine Mühe!

          Gruß
          Andi

  2. Hi,

    Mit onmouseover und onmouseout weise ich Textfeldern dynamisch andere Stylesheets zu.
    Bei einem onclick, also wenn ein Textfeld den Focus erhält, sollte onmouseout nicht mehr angewendet werden.
    Erst wenn es den Focus wieder verliert soll das Stylesheet wieder geändert werden.

    kleiner Hinweis: wenn du auf veraltete Browser wie den IE keine Rücksicht nehmen musst und willst, kannst du auch die CSS-Pseudoklassen :hover und :focus verwenden und somit komplett auf JavaScript verzichten. Das ist zudem auch ganz sicher die elegantere Lösung.

    Viele Grüße
     Benjamin

    --
    Der nächste Satz ist gelogen.
    Der vorherige Satz ist wahr.