mbr: Parameterübergabe bei eventhandlern

Hallo Forum,
habe eine Frage zu Javascript. Und zwar habe ich in Javascript eine Klasse(Ist der Begriff überhaupt richtig für javascript?) geschrieben, welche eine Stellung aus einer Schachpartie abbildet. Die Klasse stellt die Stellung auch graphisch dar, indem das DOM der Seite um eine Tabelle (8 X 8) mit den entsprechenden Grafiken der Figuren erweitert wird. Funktioniert soweit alles (Beispiel gibt es auch)

Nun will ich aber erreichen, dass die einzelnen Spielfelder auf Mausklicks reagieren. Wie ich das DOM manipulieren kann, um zum Beispiel ein Feld hervorzuheben ist mir schon klar. Mein Problem ist vielmehr, dass die Funktion, die (zum Beispiel) zum Markieren aufgerufen wird Informationen zu zwei Objekten benötigt:

  1. Auf welches Feld wurde geklickt?
  2. Mit welchen Objekt vom Typ CStellung wird gerade gearbeitet.

Wenn ich die eventhandler dynamisch generiere, sieht die Zuweisung ja folgendermassen aus:

  
eTd.onclick=markiere;  
  
function markiere() {  
//Rahmen setzen, oder aehnliches  
}  

wobei eTd hier die entsprechende Tabellenzelle aus dem DOM sein soll.

Die Funktion markiere() wird ja in der Zuweisung ohne Klammern und ohne Parameterliste notiert. Habe ich hier trotzdem irgendeine Möglichkeit, der Funktion Parameter mitzugeben? Mir ist klar, dass ich den ersten Parameter (das Feld, auf das geklickt wurde) in Form des this-Zeigers bereits habe, aber wie kann ich einen zweiten Parameter übergeben? Würde gern innerhalb des Stellung-Objektes abspeichern, welches Feld gerade markiert ist und bräuchte dafür eben dieses Stellung-Objekt. Oder ist schon der Ansatz völlig falsch?

Freue mich auf jegliche Denkanstöße.

mbr

  1. Hi,

    Die Funktion markiere() wird ja in der Zuweisung ohne Klammern und ohne Parameterliste notiert. Habe ich hier trotzdem irgendeine Möglichkeit, der Funktion Parameter mitzugeben? Mir ist klar, dass ich den ersten Parameter (das Feld, auf das geklickt wurde) in Form des this-Zeigers bereits habe, aber wie kann ich einen zweiten Parameter übergeben? Würde gern innerhalb des Stellung-Objektes abspeichern, welches Feld gerade markiert ist und bräuchte dafür eben dieses Stellung-Objekt.

    Lege dir in deinem Stellung-Objekt eine Variable an, die auf dieses referenziert. Auf diese hast du dann auch in der Methode Zugriff.

    funstion Stellung() {  
      var thisInstance = this;  
      
      this.markiere = function() {  
        alert(this); // beim Aufruf ueber irgendEinElement.onclick gibt dir das das Element  
        alert(thisInstance); // gibt dir dein Stellung-Objekt  
      }  
    }
    

    MfG ChrisB

    1. Hallo ChrisB,

      vielen Dank für deinen guten Ratschlag. Hat mir wirklich sehr weitergeholfen. Eigentlich ganz logisch, wenn man erstmal drauf gekommen ist. Ich hatte vorher schon sowas probiert:

        
      myThis = this;  
      eTd.onclick = this.markieren(myThis,eTd);  
      
      

      Das hatte aber irgendwie auch nicht richtig hingehauen. Aber mit deinen Tip klappt es jetzt. Hatte übrigens gar nicht gesehen, dass es noch einen zweiten Thread zu diesem Thema gibt. Aber ich hatte vorher ins Archiv geschaut - ehrlich ;-)

      Liebe Grüße

      mbr

  2. Hallo,

    1. Auf welches Feld wurde geklickt?
    2. Mit welchen Objekt vom Typ CStellung wird gerade gearbeitet.

    eTd.onclick=markiere;

    
    > wobei eTd hier die entsprechende Tabellenzelle aus dem DOM sein soll.  
    >   
      
    solche Eigenschaften lassen sich auch gut in einem Elternelement, oder hier bei einer Tabelle beim <table> oder <tbody> speichern, und brauchen so nicht der Funktion als Parameter mitgegeben werden.  
      
    ~~~javascript
      
    function markiere() {  
     var td=this;  
     var tbl=td.parentNode.parentNode; // table o. tbody  
     if ( tbl.old_td) {  
      // machwas mit dem letzten Element (hebe Markierung auf)  
      // ...  
      }  
     // mach was mit dem aktuellen: td  
     // ...  
     tbl.old_td=td; // erzeuge eine neue Eigenschaft, merke dir das aktuelle Element  
    }  
    
    

    Gruß plan_B

    --
         *®*´¯`·.¸¸.·