Wenn ein Klick-Ereignishandler für eine select
Element, finde ich ein sehr uneinheitliches Verhalten in verschiedenen Browsern. Ich richte eine jsfiddle-Demo . Ich sehe das so:
- Firefox 12 unter OS X (10.7 Lion): Ereignis wird ausgelöst, wenn das Element angeklickt wird. Das Dropdown öffnet sich kurz, bleibt aber nicht geöffnet. Tastaturaktionen erzeugen keine Klickaktionen.
- Firefox 12 unter Linux (Ubuntu Lucid): gleich
- Chome 19 unter OS X: Keine Maus- oder Tastaturinteraktion löst das Klick-Ereignis aus.
- Chrome 19 unter Linux: Der erste Mausklick erweitert die Optionen, ein weiterer Klick auf die noch vorhandene Auswahl oder die Optionen löst ein Klick-Ereignis aus.
- Safari 5.1.6 unter OS X: Ähnlich wie Chrome unter Linux, erster Klick erweitert Optionen, weiterer Klick auf Optionen löst Klick-Ereignis aus (im Gegensatz zu Chrome blendet Safari das Auswahlelement aus, wenn Optionen angezeigt werden).
- Android-Browser (auf Ice Cream Sandwich): Der erste Klick löst ein Ereignis aus. Die Optionen bleiben nach dem Ereignis sichtbar und können angeklickt werden. Das Anklicken der Optionen löst kein weiteres Ereignis aus.
- Chrome Beta für Android (Ice Cream Sandwich): Gleich wie Android Browser.
Ich würde mich freuen, wenn mir das jemand sagen oder mich auf die Norm hinweisen könnte, aber ich schätze, dass es nicht so nützlich ist, da ich direkt beobachtet habe, dass niemand sie befolgt. Ich habe den Verdacht, dass dies eine ungewöhnliche Vorgehensweise ist und dass es vielleicht üblicher ist, stattdessen auf das Änderungsereignis zu warten. Stimmt das? Was ist mit dem Abhören von Klicks auf die Optionen? Ich war nicht in der Lage zu bekommen, dass zu arbeiten, aber es könnte ein dummer Fehler gewesen sein.
(Um ein wenig mehr Kontext zu geben, ersetze ich ein Select-Element, das auf Google Closure's goog.ui.Select
denn diese Komponente imitiert sehr schön einige Desktop select
Renderings, vor allem von Chrome, aber nicht die bildschirmfüllende Darstellung der erweiterten Optionen, die Sie auf einem mobilen Browser sehen. Und die Anwendung hörte zuvor auf die Komponente goog.ui.Component.EventType.ACTION
Ereignis, für das es nirgendwo ein eindeutiges Analogon gibt, so dass ich einfach versuche, einen konsistenten Ersatz zu finden).