wahsaga: Event-Handler zentral registrieren u. Funktionen übernehmen

Beitrag lesen

hi,

Ich bin völlig frustriert, da ich nicht mal ansatzweise erkenne, wo ich was wie drehen muss, damit "this.id" auch wirklich die ID des Links übergibt.
Wieso funktioniert:
this.id = 'gnn'; alert(this.id);
aber das hier nicht:
alertTest('Diese ID: ' + this.id);
???

Wenn du den Aufruf wirklich im onclick-Attribut im HTML notiert hast - dann wir die Funktion im Kontext des Elements ausgeführt.

Dieser Kontext geht dir aber verloren, wenn du hier

// Hat dieses Element bereits eine onclick-Funktion?
         // dann schreibe sie in das Array:
         if(objHandlerElement[i].onclick){
            arrOnClickEvents[i] = objHandlerElement[i].onclick;

die Funktionen alle in dein Array legst.

// Das lang-Attribut zu setzen ist ein Workaround, damit der Link weiss,
         // welcher Array-Index der richtige ist:
         objHandlerElement[i].lang = i;

Pfui bah. Warum dazu das lang-Attribut missbrauchen?
Du kannst auch problemlos eigene Eigenschaften an Javascript-Objekte anhängen, bspw. objHandlerElement[i].arrOnClickEventsIndex = i;

// Hier wird nun eine neue Funktion an das onClick-Event gebunden:
         objHandlerElement[i].onclick = function() {
            if(arrOnClickEvents[this.lang])
               {
                  // eine bereits vorhandene onclick-Funktion wird aus dem Array geholt und ausgefuhert:
                  arrOnClickEventsthis.lang;

call bzw. apply könnten dir hier helfen, die Funktion auch wirklich im Kontext des ursprünglichen Elementes/Objektes auszuführen.

Btw: Diverse Ansätze für sowas sind bereits entwickelt worden, bspw. http://ejohn.org/projects/flexible-javascript-events/

gruß,
wahsaga

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