Hio,
ich habe ein Suggestskript für ein Suchformular. Die Vorschläge werden in ein zunächst leeres div als Liste eingefügt:
Also zunächst: <div id="suggest"></div>
Mit Vorschlägen:
<div id="suggest">
<ul>
<li>..</li>
<li>..</li>
<li>..</li>
</ul>
</div>
Diese Listenelemente kann ich mit der Tastatur - Pfeiltasten rauf/runter - auswählen. Das ausgewählte Element wird dabei in das Sucheingabefeld übernommen, und die Hintergrund- und Schriftfarbe des Listenelements geändert (von Schriftfarbe schwarz/Hg-Farbe weiß --> Schriftfarbe weiß/Hg-Farbe blau). Geht man zum nächsten Elemente, werden die Farben vom zuletzt gewählten Element wieder zurückgesetzt.
Das klappt in allen Browsern wunderbar - nur in Opera nicht. Ich bin mir aber sicher, dass es schon mal geklappt hat. Ich habe aber am Skript nichts mehr geändert, aber ggf. eine neue Operaversion installiert; im Moment ist es die aktuellste (9.64). Da es sonst überall klappt, hab ich gar keine Idee, was da los sein könnte.
Zwei Probleme in Opera gibt es:
a) man muss zum rauf-/runterscrollen die jew. Pfeiltaste immer zweimal drücken, um das nächste Element auszuwählen
b) die Farbe wird nicht mehr zurückgesetzt. Jedes Element bleibt also dauerhaft markiert.
Zu sehen gibt es das ganze hier.
Das Javascript zur Tastaturnavigation liegt hier (ich wollts nicht hier reinkopieren, weil es so lang ist). Ich prüfe dabei immer, welches Element gerade aktiv ist und ändere die Farben, und setze - je nachdem, ob man von oben oder von unten kommt - das vorherige Element wieder zurück auf die Standardfarben.
Bei einem Tastendruck wird einfach immer das nächste Element ausgewählt (case 38: ...
bzw. case 40: ...
; Zeile 59 bzw. 93) - was kann Opera daran stören, so dass man immer zweimal drücken muss und wieso ändern sich die Farben nicht mehr?
Falls nötig gibt es hier noch das Ajax-Skript und hier das Skript, welches durch die Sucheingabe aufgerufen wird, und dann das Skript zur Navigation aktiviert bzw. die durch Ajax erzeugte Liste im div-Tag ausgibt.
Wär echt genial, wenn jemand weiß, was da kaputt ist.