Klaus: Referenz auf Funktion uebergeben?

Hallo

Ich habe ein Bild in meinem Quellcode eingebunden und moechte nun bei onclick eine Funktionsreferenz uebergeben. Ich habe folgende zwei Sachen ausprobiert:

<img src="test.gif" name="toc1" onclick=doSomething>

<img src="test.gif" name="toc1" onclick="doSomething">

Die Funktion doSomething liegt in einer anderen Datei und sie soll mir eigentlich nur den name des aufzurufenden Elements ausgeben;

function doSomething() {
  alert(this.name);
  return true;
}

Leider passiert hier gar nichts, ich brauche jedoch die Referenz auf die Funktion. Eine Idee wie man das macht?

Danke und Gruss
Philipp

  1. hi,

    Ich habe ein Bild in meinem Quellcode eingebunden und moechte nun bei onclick eine Funktionsreferenz uebergeben. Ich habe folgende zwei Sachen ausprobiert:

    <img src="test.gif" name="toc1" onclick=doSomething>

    <img src="test.gif" name="toc1" onclick="doSomething">

    Funkioniert so nicht, an dieser Stelle müsstest du die Funktion m.E. schon "richtig" aufrufen:

    <img src="test.gif" name="toc1" onclick="doSomething();">

    Die Funktion doSomething liegt in einer anderen Datei und sie soll mir eigentlich nur den name des aufzurufenden Elements ausgeben;

    function doSomething() {
      alert(this.name);

    Da wird, wenn du die Funktion aufrufst, this auf die Funktion referenzieren.

    Leider passiert hier gar nichts, ich brauche jedoch die Referenz auf die Funktion. Eine Idee wie man das macht?

    Du könntest die Referenz dynamisch erst in Javascript an den Eventhandler knüpfen,

    {referenzAufDeinBild}.onclick = doSomething;

    Dann zeigt auch this in der Funktion auf das aurufende Element, hier also dein Bild.

    gruß,
    wahsaga

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

      function doSomething() {
        alert(this.name);

      Da wird, wenn du die Funktion aufrufst, this auf die Funktion referenzieren.

      (Spitzfindigkeit:) Nein, auf window, weshalb wahrscheinlich ein Leerstring ausgegeben wird, weil es window.name gibt.

      Mathias

      1. hi,

        Da wird, wenn du die Funktion aufrufst, this auf die Funktion referenzieren.

        (Spitzfindigkeit:) Nein, auf window,

        Echt? Ich dachte, this im Kontext einer Funktion zeigt auf diese selber?

        Oder meinst du, dass dann - weil diese keine Eigenschaft name hat - weiter "nach oben" geschaut wird, bis bei window.name eine existente, wenn auch leere, Eigenschaft gefunden wird?

        gruß,
        wahsaga

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

          Echt? Ich dachte, this im Kontext einer Funktion zeigt auf diese selber?

          »Nein, this bezieht sich auf das Objekt, an dem das Funktionsobjekt hängt, also dessen Methode die Funktion ist.«
          https://forum.selfhtml.org/?t=114970&m=736469
          https://forum.selfhtml.org/?t=114970&m=735996 (siehe dort auch http://www.quirksmode.org/js/this.html)

          function bla () {  
           alert(this === window);  
          }  
          bla();
          

          (Nicht beirren lassen von Opera, der sagt false, das ist ein Bug, schließlich ergibt this == window true);

          Auf das Funktionsobjekt selbst kann man höchstens über arguments.callee zugreifen.

          Oder meinst du, dass dann - weil diese keine Eigenschaft name hat - weiter "nach oben" geschaut wird, bis bei window.name eine existente, wenn auch leere, Eigenschaft gefunden wird?

          Nein, this.name ist eindeutig, da wird die Scope Chain (siehe Links) nicht gebraucht.

          Mathias

          1. hi,

            »Nein, this bezieht sich auf das Objekt, an dem das Funktionsobjekt hängt, also dessen Methode die Funktion ist.«

            Danke; Damit erscheint es auch wieder logischer, dass es bei anhängen über

            {referenzAufDeinBild}.onclick = doSomething;

            wieder auf das Bildobjekt zeigen würde.

            Und andersherum, allgemeine Funktion als "Anhängsel" von window, die dann per Evenethandler-HTMLattribut an ein Element gehängt wird, und in der this deshalb auf window referenziert, ist es eigentlich genauso logisch - was mir bisher aber nicht bewusst war.

            gruß,
            wahsaga

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

    <img src="test.gif" name="toc1" onclick="doSomething(this)">

    function doSomething(bild) {
      alert(bild.name);
      return true;
    }

    So würde vordergründig funktionieren, das dir der Bildname ausgegeben wird.

    Leider passiert hier gar nichts, ich brauche jedoch die Referenz auf die Funktion. Eine Idee wie man das macht?

    Du hast irgendwas vor, was du noch nicht klar genug beschrieben hast. Oder meine Lösung ist schon die gesuchte Lösung.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!