TTux: EventHandler Objektinstanzen mitgeben

Hi an alle,

seit einiger Zeit schreibe ich in Javascript Scripts.
Gerne brauche ich dazu auch OOB( ja ich weiss JS beherrscht kein richtiges). In meinen Objekten brauche ich auch öfters EventHandler, diesen EventHandler möchte ich gerne eine Methode deraktuellen Instanz setzen also:

function window() {
   //Neuses Element eestellen ud in den DOM-Baum einfügen//
   element.onClick = this.schliessen;

this.schliessen = function()
      {
      alert("Fenster wird geschlossen");
      //Das Element wieder aus dem Baum löschen //
      }

}

Leider funktioniert dass so nicht, da der EventHandler diese Instanz nicht "mitnimmt". Gibt es eine möglichkeit dies zu umgehn?

Vielen Dank für die Antwort
TTux

  1. hi,

    element.onClick =

    Javascript ist case sensitive - du möchtest element.onclick eine Funktionsreferenz zuweisen.

    gruß,
    wahsaga

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

      element.onClick =

      Javascript ist case sensitive - du möchtest element.onclick eine Funktionsreferenz zuweisen.

      gruß,
      wahsaga

      sry, das  ist mir schon klar, dies war ein Fehler hier im Forum. Aber es funktioniert auch nich wenn man es klei schriebt:).

      1. hi,

        sry, das  ist mir schon klar, dies war ein Fehler hier im Forum. Aber es funktioniert auch nich wenn man es klei schriebt:).

        Ändere mal die Reihenfolge - du weißt dem Eventhandler this.schliessen bereits zu, bevor du this.schliessen definierst.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Ändere mal die Reihenfolge - du weißt dem Eventhandler this.schliessen bereits zu, bevor du this.schliessen definierst.

          auch so funktioniert es nicht:)

  2. Hallihallo!

    function window() {
       //Neuses Element eestellen ud in den DOM-Baum einfügen//
       element.onClick = this.schliessen;

    this.schliessen = function()
          {
          alert("Fenster wird geschlossen");
          //Das Element wieder aus dem Baum löschen //
          }

    }

    Leider funktioniert dass so nicht, da der EventHandler diese Instanz nicht "mitnimmt". Gibt es eine möglichkeit dies zu umgehn?

    Vermutlich liegt das Problem darin, daß "this" im benötigten Moment nicht den Wert enthält, den Du erwartest. Vielleicht hilft Dir diese Seite bei Deinem Problem weiter.

    Da siehst Du dann auch, daß die Funktion nicht "this.schliessen" heißt (in der Deklaration), sondern einfach nur "schliessen".

    Viele liebe Grüße,
    Der Dicki

    1. Vermutlich liegt das Problem darin, daß "this" im benötigten Moment nicht den Wert enthält, den Du erwartest.

      sr4y, wie ich gerade bemerkt habe, ist mein ganzes Beispiel falsch formuliert, hier noch mal das gleiche, bei dem das selber Problem besteht:

      var window = function()
          {
          this.element = document.createElement("div");
          document.getElementsByName("body")[0].appendChild(this.element);
          this.element.onclick = this.close;

      this.close = function() { this.element.parentNode.removeChild(this.element); }
          }

      Ich hoffe jetzt ist klar, was ich meine

      1. sr4y, wie ich gerade bemerkt habe, ist mein ganzes Beispiel falsch formuliert, hier noch mal das gleiche, bei dem das selber Problem besteht:

        var window = function()
            {
            this.element = document.createElement("div");
            document.getElementsByName("body")[0].appendChild(this.element);
            this.element.onclick = this.close;

        this.close = function() { this.element.parentNode.removeChild(this.element); }
            }

        Ich hoffe jetzt ist klar, was ich meine

        Uns war das auch klar.

        this.element.onclick = this.close;

        In deiner Funktion this.close ist jetzt this = this.element also nicht das Objekt dass du mit this ansprechen willst.

        Die Zeile:

        this.close = function() { this.element.parentNode.removeChild(this.element); }

        Bedeutet also:
        this.close = function() {
        // Hier ist this = this.element
        this.element.element.parentNode.removeChild(this.element.element); }

        das Element element hat kein Element elment
        (tut mir leid, wenn du es so nennst ;-) )

        Die Lösung hatte ich dir aber schon gezeigt.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Die Lösung hatte ich dir aber schon gezeigt.

          Struppi.

          Ich hab es gerade gesehen...vielen Dank

  3. function window() {

    ganz schlecht jetzt hast du eine Funktion window.window

    //Neuses Element eestellen ud in den DOM-Baum einfügen//
       element.onClick = this.schliessen;

    this.schliessen = function()
          {
          alert("Fenster wird geschlossen");
          //Das Element wieder aus dem Baum löschen //
          }

    }

    Was ist this? was ist element?
    wenn du dein Beispiel so schreibst:
    element.onclick  = function(e)
    {
    alert("Fenster wird geschlossen");
    }

    Dann ist in der Funktion this = element.

    Aber vermute mal stark dass das nicht das Szenario ist, das du hast. Dir dürfte vermutlich eher der Hinweis von der Dicki weiterhelfen.

    Leider funktioniert dass so nicht, da der EventHandler diese Instanz nicht "mitnimmt". Gibt es eine möglichkeit dies zu umgehn?

    Da du hier keine Instanz hast, ist das schwer zusagen, aber dein Problem ist vermutlich, dass in dem Falle:
    objekt.onevent = function() {
    ....
    }
    In der Funktion this immer gleich objekt ist, du aber auf ein äußeres vorhandenes this zugreifen willst.
    Es gibt zwei Wege das zu lösen.

    a.) das äußere Objekt lokal deklarieren:

    var tmp = this;
    objekt.onevent = function() {
    tmp.tu_was();
    }

    oder das Objekt an das Objekt das den Event benutzt hängen:

    objekt.obj = this;
    objekt.onevent = function() {
    this.obj.tu_was();
    }

    Struppi.

    --
    Javascript ist toll (Perl auch!)