molily: Wie lese ich zeichen kombinationen aus

Beitrag lesen

Hallo,

<script for="document" event="onkeydown()" language="JScript" type="text/jscript">
<!--
 {
  if (window.event.keyCode == "17") {
alert("So du hast Strg gedrückt");
}
else if (window.event.keyCode == "70") {
alert("So du hast F gedrückt");
}
 }
//-->
</script>

Das bewirkt, dass wenn man Strg oder F drückt eine alert Meldung kommt.

Nein, wie sollte es das auch? Das Script wird ausgeführt, wenn die Taste Strg gedrückt wird. Dann trifft keyCode==17 zu und es öffnet sich das Alert-Fenster mit »So du hast Strg gedrückt«. Wenn direkt nach der Strg-Taste die F-Taste gedrückt wird, während passiert nichts, denn während es während die Taste gedrückt wird, ist das alert-Fenster des Strg-Events noch offen.

Im Übrigen würde dieser Code, wenn er denn nicht konzeptionell unlogisch wäre, nur im MSIE funktionieren.

Der keyCode 17 ist die Taste Strg und die Taste 70 ist F.

Eine Tastenkombination ist keine Sequenz von nacheinander gedrückten (und eventuell losgelassenen) Tasten, sondern das gleichzeitige Drücken von mehreren Tasten. Da hilft keyCode alleine nicht mehr weiter (nun gut, es ließe sich etwas mit keyup basteln, aber wie auch immer). Das Abfragen, ob die Strg-Taste bei einem Key-Event gedrückt ist, ist über die Event-Eigenschaft ctrlKey möglich, welche noch nicht DOM-standardisiert ist, aber nichtsdestoweniger relativ breit unterstützt wird (http://www.quirksmode.org/dom/w3c_events.html#keyprops):

<script type="text/javascript">
// Vergebe den Event-Handler
document.onkeydown=handleKeyEvent;
// Funktion, die den Event verarbeitet
function handleKeyEvent (e) {
 // MSIE nimmt das Event-Objekt aus window.event, DOM-kompatible Browser aus dem e-Funktionsparameter
 if (!e) e=window.event;
 // keyCode muss 70 sein und ctrlKey true
 if (e.keyCode==70 && e.ctrlKey) {
  alert('Strg+F wurde gedrückt');
 }
}
</script>

Wie gesagt ist Strg+F keine sinnvolle Kombination, da sie durch die Bank durch die Suchen im Dokument-Funktion belegt ist. Im Übrigen, was soll der Alert denn ausgeben? Soll absichtlich die Such-Funktion abgefangen werden soll, weil der Benutzer wahrscheinlich im Hauptframe statt im linken Frame suchen will? Im MSIE (6) geht das (falls nicht, vielleicht durch e.returnValue=false o.ä.), im Opera 6 wird nur das Suchfenster geöffnet, im Mozilla und Opera 7 wird sowohl das alert-Fenster als auch das Such-Fenster angezeigt.

Mathias