Martin Hein: onmousever | was steht in 'this' ?

Hallo Forum,

ich arbeite an einer Website, bei der eine externe Applikation
eingebunden ist, von der ich best. Teile nicht verändern kann
und ander widerum schon:

HTML:
-----
<input
onmouseover="javascript:showQuickTipp('', true)"
type="checkbox"
value="ja"
name="IGs_mitvers_ehepartner"
id="IGs_mitvers_ehepartner"
title="ja" />

javascript:
-----------
function showQuickTipp (helptext, isMouseEvent, doRestore)
                      {
                       alert(this);
                      }

Das HTML kann ich nicht beeinflussen, das Javascript schon.

Der 'alert(this)' gibt '[Object Window]' zurück. Ich hätte
erwartet, dass ich darüber auf die Checkbox zugreifen kann.

Mache ich irgendwas falsch ?

danke und beste gruesse,
martin hein

  1. hi,

    <input
    onmouseover="javascript:showQuickTipp('', true)"

    function showQuickTipp (helptext, isMouseEvent, doRestore)
                          {
                           alert(this);

    Der 'alert(this)' gibt '[Object Window]' zurück. Ich hätte
    erwartet, dass ich darüber auf die Checkbox zugreifen kann.

    Das täte es dann, wenn du den Eventhanlder dynamisch an des Elementobjekt gebunden hättest.
    Bei Einbindung als HTML-Attribut nicht.

    gruß,
    wahsaga

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

      merci für die Info.

      Wenn ich die Lösung richtig verstehe, muss ich nun das HTML-Attribut
      dynamisch verändern, indem ich dessen Wert so modizifiere, dass der
      Funktionsaufruf einen weiteren Paramter übergibt.

      ... funktioniert.

      besten dank und beste gruesse,
      heinetz

      1. Hi,

        jetzt hab ich ein neues Problem ;(

        ----------------------------------
        var value = "wert1";

        inputObj1.onmouseover = function(){test(this, value);}

        var value = "wert2";

        inputObj2.onmouseover = function(){test(this, value);}
        ----------------------------------

        Den event dynamisch zu schreiben funktioniert auf
        diese Weise schon grundsätzlich:

        "onmouseover" wird die Funktion test() ausgeführt.
        Nur dass der Parameter value den aktuellen Wert
        hat und nicht den Wert, den er beim Scheiben des
        Events hatte ;(

        Anders ausgedrückt:

        Wenn test als "function test(obj, text){alert(text);}"
        definiert wäre, würde bei mouseover über 'inputObj1'
        und 'inputObj2' "wert2" in der Alertbox ausgegeben.

        Kann mir jemand eine Tipp geben, wie ich dem bei kommen
        kann ?

        besten dank und beste gruesse,
        martin hein

        1. jetzt hab ich ein neues Problem ;(


          var value = "wert1";

          inputObj1.onmouseover = function(){test(this, value);}

          var value = "wert2";

          inputObj2.onmouseover = function(){test(this, value);}

          Das Verhalten ist bekannt und das soll auch so sein. Um dein Problem zu lösen, wäre es hier hilfreicherzu Wissen was du konkret willst.

          Struppi.

          1. Hi,

            das Verhalten erscheint mir auch durchaus logisch.

            Was ich will, ist die als HTML-Attribut definierten mouseover
            dynamisch parsen, weil nicht an den HTML-Code komme und mir
            der Paramter 'this' fehlt, weil ich Informationen des Elemets
            brauche.

            Was sich versucht habe, ist in einer Schleife den Inhalt aus:

            inputObjA = contentcontainer_divObj.getElementsByTagName('input');

            ... zu durchlaufen und aus String(inputObjA[i].onmouseover) Inhalte
            zu parsen, und damit dann per:

            inputObjA[i].onmouseover = function(){test(this, search_strA[0]);}

            ... die mouseovers neu zu belegen.

            Wenn es keine einfache Möglichkeit gibt, das ganze mit so etwas,
            wie einem eval() zu fixen, scheibe ich den wert einfach woanders
            hin. das sollte kein Problem sein. Hätte mich nur interessiert.

            beste gruesse,
            martin

            1. Was sich versucht habe, ist in einer Schleife den Inhalt aus:

              Was für eine Schleife?

              inputObjA = contentcontainer_divObj.getElementsByTagName('input');

              ... zu durchlaufen und aus String(inputObjA[i].onmouseover) Inhalte
              zu parsen, und damit dann per:

              inputObjA[i].onmouseover = function(){test(this, search_strA[0]);}

              ... die mouseovers neu zu belegen.

              Das geht auch genau so.

              Ich vermute dein Problme eher bei search_strA[0], im zusammenhang mit der oben erwähnten Schleife. Dafür gibt es zwei Möglichkeiten entweder mit new Function() eine Funktionsreferenz bauen oder dem Objekt den Parameter als Attribut mitgeben. Ich bevorzuge meistens das zweite. eval ist dafür nicht nötig.

              Struppi.

  2. Hallo Martin,

    ein this ist ohne Objekt - Instanzierung (fast) immer das Window-Objekt. Um auf das input - Feld zugreifen zu können musst du das this, dass da noch auch das Element selber zeigt, an die Funktion selber als Argument übergeben. Außerdem brauchst du kein "javascript:" im Attrbibut - Eventhandler zu notieren, der Browser weiß, dass er da javascript erwarten kann.

    Grüße aus Leipzig

    1. Hi,

      Außerdem brauchst du kein "javascript:" im Attrbibut - Eventhandler zu notieren, der Browser weiß, dass er da javascript erwarten kann.

      und genau deswegen interpretiert er dieses "javascript:" bereits als JavaScript-Code.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hallo,

        der Browser weiß, dass er da javascript erwarten kann.
        und genau deswegen interpretiert er dieses "javascript:" bereits als JavaScript-Code.

        ... was nicht schädlich, aber weitgehend sinnfrei ist, zumindest aber wirkungslos.

        Ciao,
         Martin

        --
        Man sollte immer wissen was man sagt
         - aber auf keinen Fall alles sagen, was man weiß.
        1. Hi,

          und genau deswegen interpretiert er dieses "javascript:" bereits als JavaScript-Code.
          ... was nicht schädlich, aber weitgehend sinnfrei ist, zumindest aber wirkungslos.

          die letzten zwei Drittel des Satzes sind - wenigstens im Kontext eines Eventhandlers - sicherlich richtig, das erste Drittel jedoch nur dann, wenn Du Browser wie z.B. Netscape 4 ignorierst ...

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Hallo,

            die letzten zwei Drittel des Satzes sind - wenigstens im Kontext eines Eventhandlers - sicherlich richtig, das erste Drittel jedoch nur dann, wenn Du Browser wie z.B. Netscape 4 ignorierst ...

            natürlich, den habe ich schon immer ignoriert. ;-)
            Abgesehen davon, dass ich damals einen Netscape 4.7x mal kurz zum Ausprobieren unter Windows 95 installiert habe. Dann wusste ich wieder, warum ich ihn weiterhin ignoriere.

            So long,
             Martin

            --
            Moskito, ergo summ.
            1. Hi,

              [...] wenn Du Browser wie z.B. Netscape 4 ignorierst ...
              natürlich, den habe ich schon immer ignoriert. ;-)

              *g* :-)

              Abgesehen davon, dass ich damals einen Netscape 4.7x mal kurz zum Ausprobieren unter Windows 95 installiert habe. Dann wusste ich wieder, warum ich ihn weiterhin ignoriere.

              Netscape 4 war mal absoluter Höchststand der Browsertechnik. Aus heutiger Sicht mag das ziemlich traurig erscheinen - aber die Alternativen waren _noch_ trauriger ...

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
    2. ein this ist ohne Objekt - Instanzierung (fast) immer das Window-Objekt.

      nein, this ist der Kontext in dem eine Funktion aufgerufen wird.

      Struppi.

  3. Hi,

    Der 'alert(this)' gibt '[Object Window]' zurück. Ich hätte
    erwartet, dass ich darüber auf die Checkbox zugreifen kann.

    Auf die Checkbox koenntest du beispielsweise auch mit document.getElementById('IGs_mitvers_ehepartner')  zugreifen.

    mfG,
    steckl