molily: Schlüsselwort "this"

Beitrag lesen

<a href="javascript:vote(<user_id>, <post_id>, 'like', this)">

Aber "this" verweist in der Funktion "vote" immer auf das HTML-Window-Objekt.

Wenn du Code mit javascript: notierst, wird er immer im globalen Kontext ausgeführt. Sprich, this zeigt auf window.

In vielen Artikeln, die ich gegoogelt habe, steht, dass nur im onClick-Attribut "this" auf das eigentliche Eltern-Element verweist. Auch das habe ich versucht, aber auch hier versteckte sich hinter "this" das HTML-Window-Objekt.

Nein. Du kannst hier durchaus onclick verwenden, solange du this an die aufgerufene Funktion übergibst:

<img ... onclick="[code lang=javascript]vote(<user_id>, <post_id>, 'like', this)">[/code]

In der Funktion nimmst du das Objekt als Parameter entgegen und nutzt diesen:

function vote (user_id, post_id, action, button) {  
   alert(button); // Wird das img-Element ausgeben  
}

Vermutlich hast du in dieser Funktion wieder direkt this verwendet, anstatt die übergebene Variable zu nutzen. Klar, auch vote wird in dem Fall im globalen Kontext ausgeführt.

this zeigt in Event-Handlern auf das Element, bei dem das Ereignis überwacht wurde. Dieses this »vererbt« sich aber nicht beim Aufruf anderer Funktionen.

<element onevent="alert(this)">

Das geht noch und gibt das Element aus. Weil dieses alert() direkt in der Event-Handler-Funktion steht, die durch das onclick-Attribut erzeugt wurde.

function test () { alert(this); }
<element onevent="test()">

Das hingegen würde window ausgeben.

Siehe
Bedeutung von this
Darüber hinaus
Traditionelles Event-Handling und Verarbeitendes Element und Zielelement.

Grüße,
Mathias