click-Event in select-Elementen

Der Internet Explorer kann nicht mit dem click-Event innerhalb von select-Elementen umgehen. Verwendet man somit AJAX-basierte Effekte, die mit der Auswahl einer Option innerhalb eines select-Elements ausgelöst werden sollen, passiert im Internet Explorer: nichts. Diese Problematik kann man umgehen, in dem man aus dem click-Event einen change-Event macht. In unserem Beispiel bedienen wir uns des Javascript-Frameworks Prototype

 und integrieren den change-Event innerhalb der kostenlosen "Layered Navigation"-Erweiterung für Magento aus dem Hause der texanischen Entwickler FME Addons.

Hierzu modifizieren wir die Datei

skin\frontend\YOURPACKAGE\YOURTHEME\js\FME\fme_layered_nav.js

Zuerst der intuitivere Teil: Wir ändern in der Funktion catalog_toolbar_init() den Event-Observer von 'click' zu 'change' und verweisen dabei auf eine eigene Listener-Funktion (z.B. catalog_toolbar_listener_econcess(evt)), die wir aus der vorhandenen Funktion catalog_toolbar_listener(evt) ableiten und ändern somit die Zeile

Event.observe(items_econcess[i], 'click', catalog_toolbar_listener);

zu

Event.observe(items_econcess[i], 'change', catalog_toolbar_listener_econcess);

Jetzt müssen dem AJAX-Request den richtigen Optionswert mitgeben, da sich durch die Änderung des Events auch das betrachtete Element ändert (bei click wird das option-Element, bei change das select-Element), welches wir innerhalb der abgeleiteten Funktion umsetzen können:

function catalog_toolbar_listener_econcess(evt) {

catalog_toolbar_make_request(Event.element(evt)[Event.element(evt).selectedIndex].value);
Event.stop(evt);
}

Damit kann nun der AJAX-basierte Filter auch im Internet Explorer mit Select-Boxen umgehen.