Rolf B: "$(this)." funktioniert nicht in Unterfunktion

Beitrag lesen

Hallo Jup0,

willkommen in der Welt der this-Kontexte von JavaScript. Eine Funktion, die "einfach so" aufgerufen wird, hat ein undefiniertes this. Es kann das window-Objekt sein, aber auch null.

Eine Callback-Funktion wie die für bootbox.confirm kann vom Aufrufer ein spezielles this gesetzt bekommen. JavaScript hat dafür spezielle Methoden (apply und call). jQuery ruft seine Callbacks immer so auf, dass this auf das Objekt zeigt, dass von jQuery gerade bearbeitet wird.

Grundsätzlich sollte man davon ausgehen, dass this einen Scope-Wechsel nicht übersteht (jeder Funktionsaufruf ändert den Scope). Lösungen für das Problem sind:

  1. this als Parameter übergeben
  2. this in einer Variablen ablegen, deren Scope für die innere Funktion sichtbar ist. Diese Variable that zu nennen ist manchmal die einzige Lösung, besser ist aber immer ein sprechender Name. In deinem Falle wäre $clickedIcon nicht schlecht. Das Dollar vorneweg um anzuzeigen dass dies ein wrapped set von jQuery ist, und clickedIcon, naja, weil's das ist.
  3. mit Hilfe der bind-Methode eine Wrapper-Funktion erzeugen, die für ein definiertes this sorgt.

Rolf

--
sumpsi - posui - clusi