JavaScript Problem mit Keyevents in Opera

M

Mr. Snoot

Gast
Hio,

ich habe hier meine Suchfunktion mit einem Suggestscript, welches in jedem Browser, außer in Opera korrekt funktioniert.

Wenn man einen Suchbegriff eingibt, klappt die Liste mit Vorschlägen auf, welche man dann mit der Tastatur (Pfeil rauf/runter) auswählen kann. gleichzeitig wird die Hintergrundfarbe des ausgewählten Elements von weiß auf blau geändert.

In Opera muss man aber a) zwei mal hoch/runter drücken, damit ein Eintrag selektiert wird und b) die Hintergrundfarbe wird nicht mehr auf weiß zurückgesetzt wenn man das nächste Element markiert. Die Fehlerkonsole liefert mir dabei auch Fehler, die ich aber nicht so ganz verstehe.

Beim ersten Drücken (wo also noch nichts markiert wird) kommt da:
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);
Beim zweiten Mal, also dann, wenn das Element markiert wurde:
Error:
name: TypeError
message: Statement on line 117: Cannot convert undefined or null to Object
Backtrace:
Line 117 of linked script http://www.halbleiter.org/javascript/key.js: In function keyPressed
curElement.previousSibling.style.color = '#000';
... Line 28 of linked script http://www.halbleiter.org/javascript/key.js: In function handleEvent
callBack.call(callBack,event,target,(returnParams)?returnParams:null);
...
Das scheint auch immer so weiter zugehen. Beim ersten Drücken der erste Fehler, beim zweiten der andere.

Google liefert mir zu Cannot convert undefined or null to Object den Hinweis, dass wohl eine ID nicht korrekt übergeben wurde, was bei mir aber eigentlich der Fall ist. In meinem Suchformular habe ich folgendes:
PHP:
<input type="text" id="eingabe" name="searchexp" tabindex="1" onkeyup="load(this, 'autocomplete', 'eingabe', event)">
Die Funktion load() übergibt also die Eingabe-ID eingabe, welche im Script autocomplete.js als txt_id übernommen wird:
PHP:
function load(suchbegriff, div_id, txt_id, e) { ...
Und das wird dann wiederum als Funktion keynavigation an die in der Fehlermeldung aufgeführte key.js weitergegeben.

Also müsste doch eigentlich alles vorhanden sein - was gefällt Opera denn daran nicht?

Eigentlich muss das Ganze zu Beginn auch korrekt funktioniert haben, denn sonst hätte ich das beim Testen ja gleich gesehen. Seit dem wurde am Script aber nichts mehr geändert - das einzige, was evtl. neu wäre ist eine aktuellere Version von Opera. Aber würde mich stark wundern, wenn da was in dieser Hinsisicht geändert worden wäre.
 
Zuletzt bearbeitet:
Ich kann dir zwar wegen fehlender tieferer Kenntnis von Javascript nicht mit deinem Script helfen,
merke aber an, dass Opera beim Drücken der "Pfeil unten"-Taste die vorher angelegten Notizen in einem Pop-up-Menü unter dem Eingabefeld anzeigt.
Möglicherweise müsste diese Funktion irgendwie deaktiviert werden ...?
 
Siehst du das Feld denn bei dir? Denn eigentlich ist das deaktiviert.

Außerdem dürfte das ja auch nur bei bereits eingegebenen Wörtern angezeigt werden.
 
Ich weiß jetzt nicht, welches Feld du jetzt meint, aber Fakt ist, dass bei einer Eingabe ins Suchfeld Vorschläge angezeigt werden, die jedoch, wie schon von dir bemerkt, nicht mit den Pfeiltasten ausgewählt werden können.

Ich weiß ebenso nicht, ob wir beide von denselben "Notizen" sprechen :). Ich meine die Funktion von Opera, jedes beliebige Wort durch Rechtsklick > Als Notiz sprechern in das "Notizbuch" zu übertragen. Ein Eingabeverlauf wie es von Firefox oder IE üblich ist, wird damit ezeugt.
 
Aber dafür müsste ja erstmal eine Notiz angelegt worden sein.
 
..., was bei mir (meistens durch versehentliches Klicken auf den Menüeintrag) bereits geschehen ist.
 
Okay, aber das ändert ja auch nichts an den JS Fehlern ;)
 
Zuletzt bearbeitet:
Zurück
Oben