Eventhandler auslösen
Problem
Sie müssen einen Event für ein bestimmtes Element (oder auch mehrere) auslösen. Dieses Element gehört zu einem oder mehreren Plugins, daher können auch mehrere Eventhandler daran gebunden sein.
Handelt es sich um ein häufig genutztes Event,
wie zum Beispiel click
oder
mousedown
, können damit auch andere
Eventhandler ausgelöst werden, die Sie gar nicht erwartet
haben.
Lösung
Wie beim vorigen Rezept können auch hier Namensräume genutzt werden. Beim Binden müssen Sie nur darauf achten, dass Sie jeder Gruppe von Handlern einen eindeutigen Namensraum zuweisen.
Das kann auch für die umgekehrte Situation nützlich sein. Wenn Sie alle Events auslösen müssen, nur nicht die mit einem Namensraum, können Sie den Operator ! verwenden. Ein entsprechendes Beispiel wird im Diskussionsabschnitt angeführt werden.
Diskussion
Wie löst man Handler mit einem bestimmten Namensraum aus?
Stellen Sie sich vor, Sie wollen das Click-Event per Code auslösen, das durch das Plugin myPlugin gebunden wurde. Sie könnten einfach das Click-Element auslösen, aber das wäre schlecht, da andere Hander, die an das gleiche Event gebunden wären, ebefalls ausgelöst würden.
So machen Sie es richtig:
jQuery.fn.runMyPlugin = function(){
return this.trigger('click.myPlugin');
};
Wie löst man Handler aus, die keinen Namensraum haben?
Vielleicht wollen Sie umgekehrt auch einen Click (oder ein anderes Event) auslösen, aber das fragliche Element wird von einem oder mehreren Plugins mit betreut. Das Auslösen eines Events könnte zum unerwünschten Aufruf von weiteren Eventhandlern führen. Solche Probleme lassen sich dann ausgesprochen schwierig debuggen.
Wenn alle Plugins einen Namensraum nutzen, können Sie folgendermaßen einen sicheren Click auslösen:
jQuery('div.panels').trigger('click!');