snoot: Probleme mit Keyevents

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.

  1. Hallo,

    Wär echt genial, wenn jemand weiß, was da kaputt ist.

    Die Fehlerkonsole von Opera weiß es ganz genau:
    --------------------------------------------------------------
    CSS - http://www.halbleiter.org/stylesheets/main.css
    Linked-in stylesheet
    -moz-box-sizing is an unknown property
    Line 34:
       -moz-box-sizing:border-box;
      -----------------^
    CSS - http://www.halbleiter.org/stylesheets/main.css
    Linked-in stylesheet
    Selector syntax error
    Line 394:
        width:20%;
      -------^
    CSS - http://www.halbleiter.org/suche/
    HTML style attribute
    Invalid value for property: font
    Line 1:
      font:verdana; font-size:10px
      -------------^
    JavaScript - http://www.halbleiter.org/suche/
    Event thread: keydown
    Error:
    name: TypeError
    message: Statement on line 125: Cannot convert undefined or null to Object
    Backtrace:
      Line 125 of linked script http://www.halbleiter.org/javascript/key.js: In function keyPressed
                document.getElementById(txt_id).value = curElement.firstChild.id;
      ...  Line 28 of linked script http://www.halbleiter.org/javascript/key.js: In function handleEvent
            callBack.call(callBack,event,target,(returnParams)?returnParams:null);
    -------------------------------------------------------------------

    Gruß, Don P

  2. Hallo,

    Es gibt anscheinend ein Problem mit
    document.getElementById(txt_id)
    weil txt_id undefined oder null ist.

    Man muss also annehmen, dass currentTarget (Zeile 27) in Opera anscheinend nicht das enthält, was es sollte. Hier musst du ansetzen.

    BTW, das Feature mit der Vorschlagliste gefällt mir ganz gut, außer in Opera ;-)

    Gruß, Don P

    1. Die Fehlerkonsole von Opera weiß es ganz genau:
      Es gibt anscheinend ein Problem mit
      document.getElementById(txt_id)
      weil txt_id undefined oder null ist.

      Man muss also annehmen, dass currentTarget (Zeile 27) in Opera anscheinend nicht das enthält, was es sollte. Hier musst du ansetzen.

      Aah, wusste gar nicht, dass Opera sowas hat, vielen Dank :)

      Werde mal Nachforschungen anstellen, was da nicht stimmt.

      BTW, das Feature mit der Vorschlagliste gefällt mir ganz gut, außer in Opera ;-)

      Danke. Aber die Tastaturnavigation wäre noch verbesserungswürdig - unabhängig von dem Problem jetzt :)

      Gruß
      snoot