キャプチャしようとしています ctrl+z このコードとjavascriptのキーの組み合わせ:
<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>
コメント行「test1」を押し続けるとアラートが生成されます ctrl キーを押し、他のキーを押します。
コメント行「test2」を押すとアラートが生成されます z キー。
「test 1&2」の後の行に従ってそれらをまとめ、押し続けます ctrl キーを押しながら z キーは期待どおりにアラートを生成しません。
コードの何が問題になっていますか?
onkeydown
ではなく、onkeyup
(またはonkeypress
)を使用しますkeyCode
90を使用しますオンラインデモ: http://jsfiddle.net/29sVC/
明確にするために、キーコードは文字コードと同じではありません。
文字コードはテキスト用です(エンコードによって異なりますが、多くの場合0〜127が残りますASCIIコード)。キーコードはキーボードのキーにマップされます。たとえば、Unicodeで文字0x22909は好意を意味し、実際にこのためのキーを持っているキーボードは(もしあれば)あまりありません。
OSは、ユーザーが設定した入力方法を使用して、キーストロークを文字コードに変換します。結果はkeypressイベントに送信されます。 (一方、キーダウンとキーアップは、テキストを入力するのではなく、ユーザーがボタンを押すことに応答します。)
Ctrl+t 可能です...キーコードを84のように使用してください
if (evtobj.ctrlKey && evtobj.keyCode == 84)
alert("Ctrl+t");
$(document).keydown(function(e){
if( e.which === 89 && e.ctrlKey ){
alert('control + y');
}
else if( e.which === 90 && e.ctrlKey ){
alert('control + z');
}
});
90は Z キーとこれは必要なキャプチャを行います...
_function KeyPress(e){
// Ensure event is not null
e = e || window.event;
if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {
// Ctrl + Z
// Do Something
}
}
_
要件に応じて、ifステートメント内にe.preventDefault();
を追加して、カスタム機能のみを実行することもできます。
この質問に出くわした将来の人々のために、仕事を成し遂げるためのより良い方法があります:
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.key === 'z') {
alert('Undo!');
}
});
event.key
を使用すると、コードが大幅に簡素化され、ハードコーディングされた定数が削除されます。 IE 9+、こちらのドキュメントをご覧ください: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
さらに、document.addEventListener
を使用すると、他のリスナーを同じイベントに上書きすることがなくなります。 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener を参照してください
最後に、window.event
を使用する理由はありません。これは積極的に推奨されておらず、脆弱なコードになる可能性があります。 https://developer.mozilla.org/en-US/docs/Web/API/Window/event を参照してください