次のコードを使用して、JavaScript でctrl+キーの組み合わせをキャプチャしようとしています:z
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<script type='text/javascript'>
function KeyPress(e) {
var evtobj = window.event? event : e
//test1 if (evtobj.ctrlKey) alert("Ctrl");
//test2 if (evtobj.keyCode == 122) alert("z");
//test 1 & 2
if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
}
document.onkeypress = KeyPress;
</script>
</body>
</html>
ctrlコメント行「test1」は、キーを押したまま他のキーを押すとアラートを生成します。
コメント行「test2」は、キーを押すとアラートを生成しますz。
「テスト 1 と 2」の後の行に従ってこれらを組み合わせると、ctrlキーを押したままキーを押しても、z期待どおりにアラートは生成されません。
コードの何が問題なのでしょうか?
ベストアンサー1
onkeydown
(またはonkeyup
)を使用するか、使用しないかonkeypress
keyCode
122ではなく90を使用してください
function KeyPress(e) {
var evtobj = window.event? event : e
if (evtobj.keyCode == 90 && evtobj.ctrlKey) alert("Ctrl+z");
}
document.onkeydown = KeyPress;
オンラインデモ:http://jsfiddle.net/29sVC/
明確にするために、キーコードは文字コードと同じではありません。
文字コードはテキスト用です (エンコードによって異なりますが、多くの場合 0 ~ 127 は ASCII コードのままです)。キー コードはキーボードのキーにマップされます。たとえば、Unicode 文字 0x22909 は「好」を意味します。実際にこのキーを持つキーボードは (あったとしても) あまり多くありません。
OS は、ユーザーが設定した入力方法を使用して、キーストロークを文字コードに変換します。結果は、keypress イベントに送信されます。(一方、keydown と keyup は、テキストの入力ではなく、ユーザーがボタンを押したことに応答します。)