PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JavaScript: Event triggern


Ben Carter
2016-07-29, 11:56:00
Hallo allerseits!

Gibt es in JavaScript bzw. mit JQuery eine Möglichkeit ein Event generell zu triggern?

Und zwar habe ich auf mehren Objekten einen EventListener, der z.B. auf das Event "meinEvent" hört. Jetzt will ist aber "meinEvent" nicht für jedes Objekt mit $(objekt).trigger('meinEvent'); auslösen, sondern einfach mal ganz generell den Trigger "meinEvent" abfeuern und darauf sollten dann alle Objekte mit dem Listener hören.

Das Ganze ist vollkommen losgelöst vom HTML bzw. DOM.

Vereinfacht gesagt zeichne ich in einem Canvas eine unbestimmte Anzahl an Objekten und wenn ich in das Canvas klicke, prüfe ich, ob auf ein Objekt geklickt wurde. Natürlich könnte ich jetzt durch die Objekte iterieren und jeweils das Event auslösen, aber eleganter wäre es imho wenn ich mir das sparen kann. Sonst könnte ich mir den ganzen EventListener Kram sparen.

Danke,
lg Ben

Sephiroth
2016-07-29, 22:31:53
Ein Event kann für alle Objekte ausgelöst werden, die das Interface EventTarget implementieren. Dazu muss aber je EventTarget die Methode dispatchEvent aufgerufen werden.

https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent

edit:

Vereinfacht gesagt zeichne ich in einem Canvas eine unbestimmte Anzahl an Objekten und wenn ich in das Canvas klicke, prüfe ich, ob auf ein Objekt geklickt wurde. Natürlich könnte ich jetzt durch die Objekte iterieren und jeweils das Event auslösen, aber eleganter wäre es imho wenn ich mir das sparen kann. Sonst könnte ich mir den ganzen EventListener Kram sparen.
Wenn der click event am gezeichneten Objekt ausgelöst wird, dann steigt er i.R. im DOM-Baum nach oben (außer das wird verhindert; die sog. bubbling phase). D.h. du brauchst auch nur einen EventListener für den click event auf einem Element, was allen gezeichneten Objekten übergeordnet ist.

Ben Carter
2016-07-29, 23:22:53
Das klingt schon mal sehr gut. Vielen Dank, ich werde das am Montag direkt ausprobieren.

lg Ben