ChrisB: onclick nur wenn, wenn nichts anderes?

Beitrag lesen

Hi,

Alternativ kannst du am Link ein onclick registrieren, und dann verhindern, dass dieses Event nach oben (zum Div) bubbelt.
Geht mit e.stopPropagation() (Firefox u.a.) und e.cancelBubble = true (IE).

Da der Inhalt aus einer Datenbank kommt (und zwar nicht zu wenig..) ist das zu viel Aufwand und auch zu unsauber, weil ich ja einen Link vergessen könnte.

Nun, du könntest das DOM clientseitig durchlaufen - das liefert dir alle Links oder A-Element unterhalb eines bestimmten Elements, damit kannst du keinen "vergessen".

Unsauber wäre es hier vor allem aber, weil du nur an einem interessiert bist - dem Klick auf dein DIV-Element und *genau* darauf.
Jetzt alle Nachfahrenelemente mit eigenen onclick-Handlern zu versehen, obwohl diese auf einen solchen gar nicht gesondert reagieren sollen - das wäre ein ziemlich unsinniger Ansatz.

"Event Delegation" lautet das Stichwort.
Normalerweise ist darunter zu verstehen, dass man bspw. bei einer Tabelle nicht auf Klicks auf die einzelnen Zellen reagiert, um dann mit denen irgendwas zu machen. Sonder man registriert den Handler auf TABLE - und schaut dann bei dessen Aufruf jeweils nach, welches Nachfahrenelement das eigentliche Ziel des Klicks war - und wenn es eine Tabellezelle war, dann macht man von dieser Stelle aus das gewünschte mit dieser.
(Hier liegt der Fall zwar leicht anders - aber die dort gebrauchten Event-Eigensachften finden auch hier Verwendung.)

Meine if-Anweisung sieht also jetzt so aus:

if ((event.target == '[object HTMLDivElement]') || (event.target == '[object HTMLSpanElement]') || (event.target == '[object HTMLParagraphElement]') || (event.target == '[object HTMLTableElement]') || (event.target == '[object HTMLTableCellElement]') || (event.target == '[object HTMLTableSectionElement]')) {

Was soll die bezwecken?

MfG ChrisB

--
Light travels faster than sound - that's why most people appear bright until you hear them speak.