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 son_quatsch Experte (5.3k Punkte)
Das war jetzt sehr viel besser testbar. Nicht nur der Firefox, sondern mindestens auch Opera (und sicherlich noch mehr Browser) reagieren nicht "seltsam", sondern richtig. Das liegt u.U. schon an dem nicht vorhandenen aber erwartetem Attribut action="" im Form-Element.

Ändere die Zeile
<button onClick="machListe ()">mach Liste</button>

um in
<button onClick="machListe(); return false;">mach Liste</button>

...damit wird nämlich verhindert, dass die Form auch abgeschickt wird.
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
Danke, son_quatsch.

Das mit dem return false hats gebracht
und action="" hab ich auch eingefügt.
Im FF funktioniert jetzt die Mausbedienung.
Zurück also zum Problem der Tastaturbedienung.

www.abschweb.de/test/ziel.htm

Im IE läufts. Im FF scheinen die Funktionen checkSuchEnter () und checkTrefferEnter () nicht einmal aufgerufen zu werden.
Was könnte das jetzt sein?

Manfred
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
Ich bin immer noch vom Firefox irritiert.
Ich habe zwei Testdateien erstellt:

In www.abschweb.de/test/taste.htm rufe ich die Funktion Check () dokumentweit onkeypress.
Hier ist im FF der Tastencode verfügbar.

In www.abschweb.de/test/form.htm rufe ich die Funktion Check () onkeypress im Eingabefeld
Hier weiß ich nicht, wie ich im FF an den Tastencode rankommen soll.
0 Punkte
Beantwortet von katy Mitglied (787 Punkte)
da hat dir die veraltete Syntax mit den Aufrufen über Attribute in den Tags einen Strich durch die Rechnung gemacht.

So klappts bei mir:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Form Test</title>

<script type="text/javascript">
function Check (Taste)
{
if (typeof (Taste) == 'object')
alert ('Netscape: ' + Taste.which)
else
if (typeof (event) == 'object')
alert ('Microsoft: ' + event.keyCode)
else
alert ('nix?');

return false;
}

window.onload=function ()
{
with (document)
{
Formular.Eingabe.focus ();
}
document.getElementById("Eingabe").onkeypress=Check;
}

</script>
</head>
<body>
<form name="Formular" action="">
<input id="Eingabe" size=20 >
</form>
</body>
</html>


katy
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
Danke, katy,
aber ich sehe weder, was daran veraltet sein soll, dass das Ereignis beim Eingabefeld beschrieben wird, wie es der IE immer akzeptiert und auch der FF in allen anderen Fällen, wo nicht vom System ein Parameter zur Laufzeit reingetrickst werden muss,
noch sehe ich es als besonders modern und praktisch an, dass es nur hinterrücks über DOM-Javascript gehen soll, so schön das auch ist, dass man damit alles und jedes nachträglich manipulieren kann, wenn man das will und braucht.

In der Testdatei funktionierts so auf Anhieb, in der echten Datei nicht, aber ich bin dran.

Manfred
0 Punkte
Beantwortet von katy Mitglied (787 Punkte)
Ein einfaches "Danke" hätte auch gereicht. Wenn dir meine Lösung so wenig gefällt musst du sie ja nicht nutzen.

Aber nach dem Angepflaume hier wundere dich bitte nicht, wenn ich mich mit weiteren Tipps zurückhalte.

katy
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
katy,
es sieht so aus, dass es zu deiner Lösung keine Alternative gibt.
Eine Lösung, die funktioniert ist eine gute Lösung. Aber ich sehe sie als guten Trick, um die Unzulänglichkeiten des Firefox auszubügeln - als eine Arbeitslösung. Du solltest stolz sein, dass du weißt, wie man die ausbügelt. Ein ganz dickes Lob! Dich anzupflaumen war definitiv nicht meine Absicht!

Manfred
0 Punkte
Beantwortet von katy Mitglied (787 Punkte)
Um einiges klarzustellen:

Meiner Kenntnisse im Thema JavaScript bin ich mir selbst sehr bewusst.

Das ist kein Trick, sondern die gängige Syntax. Spätestens bei solchen komplexen Vorhaben wie Event-Bubbling greift die Einbindung über Tag-Attribute nicht mehr.

Ich bügle meine Skripte grundsätzlich nicht!

katy
0 Punkte
Beantwortet von abschweb Mitglied (233 Punkte)
ok, nehmen wir einmal an, das W3C würde nur noch diese Art der Event-Einbindung zulassen. Ich würde dann die einfache Möglichkeit vermissen, auf das eigene Objekt zuzugreifen.
also derart:
<button onclick="mach (this)"></button>

Ohne diese Parameterübergabe müsste ich einen Zugriff auf das eigene Objekt innerhalb der Handlerfunktion aus der Dokumentwurzel herleiten.
Das hätte m.E. zur Folge, dass es nicht mehr möglich wäre,
die selbe Handlerfunktion an mehrere Objekte zu binden,
Oder sehe ich da was falsch?
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Soweit ich weiss hast du auch mit
element.onevent = function(blub) { ... }
Zugriff auf das Element selbst über die Variable "this".
...