- PR -

ショートカットキー抑止について

1
投稿者投稿内容
Dra
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 111
投稿日時: 2004-10-08 13:50
JavaScriptの質問です。(投稿する場所がわかりませんでした・・)
「Alt + ←」等のショートカットキーを抑止するため、
以下のようなコードを書いているのですが、うまくいきません。

document.onkeydown=keydown;

function keydown(ev) {
var CancelFlg;
CancelFlg = 0;
ev = window.event;
if (ev.altKey == true) {
//alert("1");
switch (ev.keyCode) {
case 37: // ←
case 39: // →
CancelFlg = 1;
break;
default:
CancelFlg = 0;
}
}
if (CancelFlg == 1) {
alertEx("当キー操作は禁止しています。")
ev.keyCode=0;
return false;
}
}
function alertEx(msg) {
altmsg = new String(msg);
setTimeout("alert(altmsg)",0);
};

エラー時にalert()で直接メッセージ表示していないのは、
他のメッセージ表示も共通でalertEx()関数を使用しているからだけです。

上記のコードにより、ショートカットキー押下時にエラーメッセージが表示されたのですが、
ショートカットキーで押された内容が無効にならずに、前ページに遷移してしまいます。
alertEx()関数ではなく直接alert()関数を呼ぶと正常に動作します。
原因が全くわかりません。

環境:Win2000pro IE6.0

アドバイスお願いします。
aki
常連さん
会議室デビュー日: 2004/09/17
投稿数: 23
お住まい・勤務地: 東京・神奈川
投稿日時: 2004-10-08 14:13
引用:

Draさんの書き込み (2004-10-08 13:50) より:
JavaScriptの質問です。(投稿する場所がわかりませんでした・・)
「Alt + ←」等のショートカットキーを抑止するため、
以下のようなコードを書いているのですが、うまくいきません。



こんにちわ。中村です。
イベントを無効にすればよいかと思われますので、
window.eventのreturnValueに対してfalseを設定するように

ev.returnValue = false;

を追加すれば大丈夫だと思います。


[ メッセージ編集済み 編集者: 中村 編集日時 2004-10-08 14:15 ]
Dra
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 111
投稿日時: 2004-10-08 14:42
中村さん、ありがとうございます。
CancelFlg==1(コード参照)の際に
ev.returnValue = false;
を追加してみましたが、今までと同様に「ショートカットキーで押された内容が無効にならずに、前ページに遷移」してしまいます。
何かsetTimeout()が影響しているのでしょうか?
aki
常連さん
会議室デビュー日: 2004/09/17
投稿数: 23
お住まい・勤務地: 東京・神奈川
投稿日時: 2004-10-08 15:40
引用:

Draさんの書き込み (2004-10-08 14:42) より:

何かsetTimeout()が影響しているのでしょうか?



一度ソースを貼り付けて実行した所、
setTimeout()が影響していてうまく動作しませんね。

かなり安直に考えてました…
clearTimeoutを直後につかってもかわらないですし…
Dra
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 111
投稿日時: 2004-10-08 17:52
中村さん、ありがとうございます。
とりあえずは直接、alert()で対応します。
あいつー
ベテラン
会議室デビュー日: 2004/05/20
投稿数: 89
投稿日時: 2004-10-08 18:19
あいつーです。

以前似たような処理をしたときはkeyCodeを
無理やりDELキーのものに変え、
その上でreturn falseをするとうまく行ったような気がします。
Dra
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 111
投稿日時: 2004-10-08 22:01
あいつーさん、ありがとうございます。
一度試してみます。
1

スキルアップ/キャリアアップ(JOB@IT)