MadeVr: OnBlur / OnFocus Problem

Ich habe ein Problem mit dem Handler OnBlur. Der wird nämlich nur aktiviert, wenn mann z. B. irgendwo in den Body klickt.

Wie aber kann man feststellen, ob ein Objekt z. B. per Tabulator verlassen worden ist? Dann bringt OnBlur nämlich nichts.

  1. Hallo MadeVr.

    Ich habe ein Problem mit dem Handler OnBlur. Der wird nämlich nur aktiviert, wenn mann z. B. irgendwo in den Body klickt.

    Kann ich nicht nachvollziehen. Wie sieht dein auf ein Minimum gekürzter Code aus?

    Wie aber kann man feststellen, ob ein Objekt z. B. per Tabulator verlassen worden ist? Dann bringt OnBlur nämlich nichts.

    Doch, durchaus. Sofern das Objekt ein Link oder ein Formularelement ist, feuert onblur. Bei allen anderen Elementen jedoch nicht, da sie gar nicht erst fokussiert werden können.

    Einen schönen Donnerstag noch.

    Gruß, Mathias

    --
    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]
    1. Hallo MadeVr.

      Ich habe ein Problem mit dem Handler OnBlur. Der wird nämlich nur aktiviert, wenn mann z. B. irgendwo in den Body klickt.

      Kann ich nicht nachvollziehen. Wie sieht dein auf ein Minimum gekürzter Code aus?

      Wie aber kann man feststellen, ob ein Objekt z. B. per Tabulator verlassen worden ist? Dann bringt OnBlur nämlich nichts.

      Doch, durchaus. Sofern das Objekt ein Link oder ein Formularelement ist, feuert onblur. Bei allen anderen Elementen jedoch nicht, da sie gar nicht erst fokussiert werden können.

      Einen schönen Donnerstag noch.

      Gruß, Mathias

      Hm, also der Code:
      onfocus="fade(this, 000,000,160,145,167,227,<?php echo $fade_time ?>)" onblur="fade(this, 145,167,227,000,000,160,<?php echo $fade_time ?>)"

      Es ist also ein Textfeld, dass durchaus ein OnFocus liefert, nur wenn mann dann per Tabulator ins nächste Textfeld wechselt, wird OnBlur nicht aufgerufen.

      1. Hallo MadeVr.

        Hallo MadeVr.

        Bitte zitiere vernünftig, danke.

        Hm, also der Code:
        onfocus="fade(this, 000,000,160,145,167,227,<?php echo $fade_time ?>)" onblur="fade(this, 145,167,227,000,000,160,<?php echo $fade_time ?>)"

        Dieser Code ist unbrauchbar, da PHP für clientseitige Probleme nicht relevant ist. Bitte poste das, was im Browser ankommt.

        Es ist also ein Textfeld, dass durchaus ein OnFocus liefert, nur wenn mann dann per Tabulator ins nächste Textfeld wechselt, wird OnBlur nicht aufgerufen.

        Auch das kann ich nicht nachvollziehen:

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
        <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">  
          <head>  
            <title></title>  
            <meta http-equiv="content-type" content="text/html; charset=utf-8" />  
            <script type="text/javascript">  
          
        [code lang=javascript]    function baz() {  
              alert(this.name);  
            }  
          
            window.onload = function() {  
          
            document.forms[0].elements[0].onblur = baz;  
            document.forms[0].elements[1].onblur = baz;  
          
            };
        

        </script>
          </head>
          <body>
            <form action="">
              <p><input type="text" name="foo" /> <input type="text" name="bar" /></p>
            </form>
          </body>
        </html>[/code]

        In beiden Fällen wird der Name des soeben verlassenen Formularelementes ausgegeben.

        Einen schönen Donnerstag noch.

        Gruß, Mathias

        --
        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]
        1. Ja, vielleicht hab ich mich etwas unklar ausgedrückt, am besten du siehst dir die Site mal selbst an.
          Du solltest aber die unteren Textfelder zum Testen nehmen, an den oberen hab ich ein wenig rumgespielt.

          http://harel.pytalhost.eu/register.php

          Der gewünschte Effekt erscheint, wenn man in ein Textfeld (Registrierungscode z.B.) klickt (OnFocus) und dann wieder in den Body-Bereich (OnBlur). Wenn man aber nicht in den Body-Bereich, sondern auf ein anderes Textfeld klickt (Lieblingsfächer z.B.) scheint OnBlur nicht aufgerufen zu werden.

          Ich hoffe so kannst du mir helfen, danke schonmal ;-)

          1. Hallo MadeVr.

            http://harel.pytalhost.eu/register.php

            Der gewünschte Effekt erscheint, wenn man in ein Textfeld (Registrierungscode z.B.) klickt (OnFocus) und dann wieder in den Body-Bereich (OnBlur). Wenn man aber nicht in den Body-Bereich, sondern auf ein anderes Textfeld klickt (Lieblingsfächer z.B.) scheint OnBlur nicht aufgerufen zu werden.

            Dein Problem kann ich nun nachvollziehen. Aber eine Lösung weiß ich leider nicht. Die focus– und blur–Events werden korrekt aktiviert, doch ich wüsste momentan nicht, warum hier ein Unterschied zwischen Tastatur und Maus gemacht werden sollte. Der Code von fade.js ist hierbei auch keine sonderliche Hilfe, da kaum lesbar.

            Einen schönen Donnerstag noch.

            Gruß, Mathias

            --
            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]
            1. So'n Mist aber auch, ich glaube mittlerweile, dass es an der fade.js liegt.

              Ich poste hier nochmal den Code, in der Hoffnung irgendein Spezialist kann mir helfen!

              hexa = new Array(16);
              for(var i = 0; i < 10; i++) hexa[i] = i;
              hexa[10]="a"; hexa[11]="b"; hexa[12]="c";
              hexa[13]="d"; hexa[14]="e"; hexa[15]="f";

              function hex(i) {
              if (i < 0) return "00";
              else if (i > 255) return "ff";
              else return "" + hexa[Math.floor(i/16)] + hexa[i%16];
              }

              function setbgColor(r, g, b) {
              var hr = hex(r); var hg = hex(g); var hb = hex(b);
              obj.style.background = "#"+hr+hg+hb;
              }

              var obj, sr,sg,sb,er,eg,eb,step,at;

              function setBg() {
              setbgColor(
              Math.floor(sr * ((step-at)/step) + er * (at/step)),
              Math.floor(sg * ((step-at)/step) + eg * (at/step)),
              Math.floor(sb * ((step-at)/step) + eb * (at/step)));
              at++;
              if (at<=step) setTimeout("setBg()",15);
              }

              function fade(elm, a,b,c,d,e,f,g) {
              sr=a;sg=b;sb=c;er=d;eg=e;eb=f;step=g;at=1;
              obj=elm;
              setBg();
              }

              Danke im Vorraus!

              1. So, ich jetzt doch noch einen Ansatz gefunden, wär schön, wenn mir damit jemand weiterhelfen könnte.

                Es schein als würde es Probleme mit OnBlur und einem darauffolgenden OnFocus geben. Wenn ich nämlich im nächsten Textfeld OnFocus lösche, dann funtioniert der OnBlur anstandslos.

                Ich habe bereits versucht das ganze mit fade2.js zu duplizieren, aberd das funktioniert nicht.

                Weiß da jemand weiter?

                1. Alles klar, ich habe das Problem in den Griff bekommen:

                  einfach eine Funktion davor setzen:

                  onfocus="pause(); fade(this, 000,000,160,145,167,227,<?php echo $fade_time ?>)" onblur="fade(this, 145,167,227,000,000,160,<?php echo $fade_time ?>)"

                  Der Knaller: die Funktion ist leer, sie enthält nur einen Kommentar.