Bitte mal ein funktionierendes Beispiel, so kann ich das echt nicht nachvollziehen bzw. muss mutmaßen:
Der Fokus befindet sich die ganze Zeit im Formularfeld. Die Auswahl in den Vorschlägen erfolgt mit den Pfeiltasten. Die Bestätigung erfolgt mit einem Enter im Formularfeld, wodurch der Feldwert aktualisiert wird.
Klar, wenn du das Modell verfolgst, kommst du in die Bredouille. Ich wüsste auch nicht, wie du das umgehen und eindeutig Enter zum Vorschlag bestätigen und zum Formular absenden unterscheiden kannst. Wie gesagt würde ich dir ein anderes Modell vorschlagen, wo sich dieses Problem überhaupt nicht ergibt.
Wenn es nicht stimmt, was ich oben vermutet habe, und der Fokus auch mal auf einem Element in der Vorschlagsliste liegt: Wieso wird dann, wenn der Fokus dort liegt, das Formular abgesendet beim Drücken von Enter? Behandelt branchListKeyboardAction nur Ereignisse in der Vorschlagsliste oder auch zusätzlich die Ereignisse beim input?
Aber ich probiere mal einen Nebensatz von Dir aus. Nämlich das input-textfield bei einem KeyEvent zu fokussiren. Vielleicht hilft das ja gegen das Auslösen des Submits.
Oder kann ich den KeyEvent auch konsumieren? zerstören, während ich ihn bearbeite?
Standardaktion unterdrücken
Das ist im Grunde das, was du im submit mit return false erledigst. Das geht genauso auch in deiner Handlerfunktion.Mathias
Hallo Mathias,
vielen Dank für Deine Hilfe.
Das mit dem Fokus macht Sinn. Der Fokus bleibt die ganze Zeit im Textfeld. Die Navigation in der Liste passiert im Prinzip ausschließlich durch die KeyEvents die ich im Textfeld abfange. Somit nützt es nichts den Fokus zu setzen.
Das Problem waren ganz klar die Standarevents. Danke für deinen Link. Das kannste ich noch nicht. "return false" bringt bei mir nichts. Ich kann nicht erklären warum, aber ich vermute dass es entweder am switch liegt, der scheinbar nicht nach einem return aussteigt, sondern erst beim break? Oder es liegt daran, dass ich onKeyPress abfange und der Rückgabewert davon die Standardaktion nicht unterdrücken kann. Ich weiß nicht.
Zumindest geht es jetzt, weil ich folgendes im Eventhandler-Switch eingefügt habe:
if (eventIncoming.preventDefault) {
eventIncoming.preventDefault();
} else {
eventIncoming.returnValue = false;
}
Das funktioniert im Chrome, IE, und Firefox.
Vielen dank nochmal.
greetz
SLi