10.7k Aufrufe
Gefragt in Webseiten HTML von abschweb Mitglied (233 Punkte)
Hallo Experten,

ich habe ein HTML-Formular, das auch ganz gut funktioniert.
Enthalten sind unter anderem: Ein Listenfeld und ein Knopf, der entsprechend der Wahl im Listenfeld eine Javascript-Funktion aufruft. Im Listenfeld wird ondblclick ebenfalls diese Funktion aufgerufen. Die Mausbedienung lässt also keine Wünsche offen. Schön wäre es jetzt, wenn das auch mit der Entertaste erreicht werden könnte, wenn der Fokus im Listenfeld steht. Gibt es dafür eine einfache Lösung?

Danke,
Manfred

22 Antworten

0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
es gibt das Event "onkeypress", "onkeydown" und "onkeyup", die du für diesen Zweck verwenden kannst.
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
Danke, ich hab die jetzt auch in SelfHTML gefunden.
Nicht gefunden habe ich dort (in keinem der Beispiele kommt das vor), wie ich im Event-Handler die Tasten voneinender unterscheiden kann.
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Wenn du englisch kannst, empfehle ich dir dieses Kapitel auf quirksmode.org
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
Hab mich erinnert, ähnliches schon mal gemacht zu haben.

hab als Event-Handler jetzt:


function checkEnter (Taste)
{
if (((event) ? event.keyCode : Taste.which) == 13)
geh_hinein ();
}


Ist halt lausig, dass man dabei wohl immer zwischen den Browsern unterscheiden muss.

Im IE klappt das.

Im FF kann ich es wegen eines anderen Problems noch nicht testen.


Manfred
0 Punkte
Beantwortet von katy Mitglied (787 Punkte)
Schön wäre es jetzt, wenn das auch mit der Entertaste erreicht werden könnte, wenn der Fokus im Listenfeld steht.
wenn die JavaScript-Funktion im onsubmit-Event des Formulars steht und dein Button eigentlich ein Submit-Button ist, ist ein onkey... -Event nicht mehr nötig, denn den onsubmit-Event ruft das Formular automatisch bei Betätigung der Enter-Taste auf.

katy
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
denn den onsubmit-Event ruft das Formular automatisch bei Betätigung der Enter-Taste auf.
Sollte (zumindest gemäß Windows-GUI) so sein, ist aber nicht in allen Browsern der Fall. Aber ok - in den meisten und am meisten verbreiteten ;-)

Verbunden mit der oben exzellent empfohlenen Seite müsste das Beispiel so aussehen, damit es in allen Browsern funktioniert (verknüpft im onKeydown-Event):
function checkEnter( e ) {
var e1= e|| window.event;
if ( e1.keyCode== 13 ) mach_sonstwas();
}
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
@son_quatsch
Deine Funktion sieht meiner (Antwort 4) sehr ähnlich.
Die Konstruktion

var e1 = e || window.event;


hätte ich bisher nicht gewagt, sieht verwegen aus, die gleichzeitige Verwendung als Boolean und als Objekt, aber warum nicht, hat was.


@katy
Zum Submit machen macht keinen Sinn, weil das Ganze zweistufig ist, also nacheinender zwei verschiedene Knöpfe diese Rolle bekommen.
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Ich verwende statt diesem Konstrukt meistens folgendes:
function ein_eventhandler(evt) {
if (window.event) evt = window.event;
// Rest der Funktion ....
}
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
Ich habe jetzt eine Testdatei erstellt:
www.abschweb.de/test/ziel.htm
Das Tastenproblem ist jetzt zweitrangig.
Im IE funktioniert es in allen Variationen.
Im FF scheitert es beim Klicken auf "suchen".
Die Ergebnisliste wird zwar für einen Bruchteil einer Sekunde ins Ausgabefeld gestellt, verschwindet aber wieder. Ich finde den Fehler nicht!
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
Sorry das sich das Problem gewandelt hat.
Wäre es sinnvoll, einen neuen Thread aufzumachen?
Einstweilen mach ich hier weiter.

Das Problem lautet also jetzt:
Warum reagiert der FF in Formularen so seltsam?
Gibt es Abhilfe?

Ich hab das Problem jetzt auf seinen Kern reduziert:
www.abschweb.de/test/select.htm
Während der IE wie erwartet beim Klick auf den Knopf die Liste präsentiert, lädt der FF schnöde die Webseite neu, erkennbar an der Init-Meldung.

Manfred
...