- ベストアンサー
Altキー+○キーでのショートカットの制御
お世話になります。 papillon68と申します。 Windows 2000、XP IE6以降限定 ブラウザでAlt+○キーを押すことで様々な操作をキーボードのみで 行うことができます。 (参考:http://www.clubqa.com/weekly/qa020403.htm) 今回行いたいことはこのキーボードのみでの操作の 一部を制限したいというものです。 例えば、 ・Altキー+←キーで一つ履歴が戻ります。[history.back(-1)] ・Altキー+→キーで一つ履歴が進みます。[history.back(1)] これを制限するために ----------------------------------------- // Altキー+←キーの制限 if((event.altKey) && (event.keyCode==37)) { // チェック用 //alert('通った'); event.keyCode = 0; return false; } ----------------------------------------- としていますが、一つ前の画面に戻ってしまいます。 alert()を使って実際にif内を通っているかを チェックしてみると通っていないようです。 同じようにCtrlの場合だと同じ方法で制限することができました。 ----------------------------------------------- // 更新の制限(Ctrl+R) if((event.ctrlKey) && (event.keyCode==82)) { // チェック用 // alert('通った'); event.keyCode = 0; false; } ----------------------------------------------- こちらはアラートが表示され、ページが更新されません。 Altキーの場合もCtrlキーと同じように制限することはできないでしょうか。 お手数をお掛け致しますが、ご教授よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
お礼
解決です。 以下のような処理にしました。 禁止操作を prohibition_key_list に追加したり、 削除したりすることで簡単に制限できるようにしています。 この方がメンテナンスもしやすいためです。 貴重なお時間を割いてご教授頂き、本当にありがとうございました。 ------------------------------------------------- // 一度に投稿できないため、分割します。 // 投稿1 var prev1_key = 0; // 1つ前のキーコード var prev2_key = 0; // 2つ前のキーコード // ※禁止操作の一部です。 var prohibition_key_list = new Array(); // キーイベントで禁止するリスト prohibition_key_list['ctrl_r'] = new Array(17, 82); // 更新(Ctrl+R) prohibition_key_list['alt_prev'] = new Array(18, 37); // ページを一つ前に戻す(Alt+「←」) prohibition_key_list['alt_next'] = new Array(18, 39); // ページを一つ進める(Alt+「→」) prohibition_key_list['f5'] = new Array(); prohibition_key_list['f5'][0] = 116; // 更新(F5) // キーダウンイベントの禁止 document.onkeydown = prohibition_key_event; // キーイベントの制限関数 function prohibition_key_event() { var keys = null; for(keys in prohibition_key_list) { if(prohibition_key_list[keys].length == 2) { // 投稿2へ -------------------------------------------------
補足
DQ9様、ご返信ありがとうございます。 「event.keyCode = 0;」 をコメントとすることで思惑通り処理できました。 ただし、F1~F12までのキーは event.keyCode = 0 としないと 実行されてしまいます。 F1~F12が押されたときには event.keyCode = 0 を通そうと思います。 ありがとうございました。