人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ESCキーの入力を検出するJavaScriptがあれば教えてください。

要するに実現したいのは、IEでテキストエリアに入力中に(IME確定後の)ESCで入力内容がクリアされてしまいますが、これを防ぎたいのです。ようは半角/全角キーの押し間違え防止対策です。(ESCはreset扱いのようですので)

ちなみにformタグでonResetイベントを発行しその中でconfirmすれば最悪カーソルのあるカレントの入力フィールド以外のクリアを(ワンクッションおくことで)防ぐことができますが、カレントのエリアは残念ながら消えてしまいます。

IME状態で消えてしまうのは仕方ないとしてIME確定後にカレントのフィールドも消さない方法があればそちらでも結構です。

IE使わないでFireFoxにしろとか、エディタに下書きしてからペーストすればとか、何か他のソフトをインストールさせて防ぐとか、常にctrl+Aとcせよとか、そういった類の回答は全く期待しておりません。

onkeypressなどでESCを検出させるなどの方法があれば、その方法を具体的にお願いします。あるいは逆にESCを押せなくする方法でもかまいません。
IE限定のイベントでも結構です。JavaScript識者の方、どうかご指南の程よろしくお願いします。

●質問者: kehi3
●カテゴリ:コンピュータ インターネット
✍キーワード:firefox IE IME JavaScript reset
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● llusall
●26ポイント ベストアンサー

こちらでいかがでしょうか?

スクリプトを埋め込めば、ESCキーの機能を抑止できるかと思います。

<script Language="JavaScript">

<!--

//特定キーの機能抑止

function CtrlFnckey(evt) {

    if (document.all) {

        } else if (event.keyCode == 27) { // Esc

            return false;

        } else {

            return true;

        }

    }else{

        } else if (evt.keyCode == 27) { // Esc

            return false;

        } else {

            return true;

        }

    }

    return true;

}

// イベントの割付

document.onkeydown=CtrlFnckey;

// -->

</script>

※IE6とFireFox1.5で大丈夫だと思います。

◎質問者からの返答

event.keyCode == 27なんてできたんですね。

ありがとうございました。

IE、FFでの検証も感謝します


2 ● takemori
●27ポイント

//--押されたキ?の文字を返す

function getKEYCODE(e){

if(document.all)

return event.keyCode

else if(document.getElementById)

return (e.keyCode!=0)?e.keyCode:e.charCode

else if(document.layers)

return e.which

}

//--キーeventをセットする

document.onkeydown = keypress

if(document.layers)

document.captureEvents(Event.KEYDOWN)

function keypress(e){

if(getKEYCODE(e)==27) return false;

return;

}

調べてみたらこれでうまくいきました

http://d.hatena.ne.jp/

◎質問者からの返答

検証感謝です。

これでできそうです。エレガント。


3 ● irhnhhtn
●27ポイント

URLはダミーです。

http://q.hatena.ne.jp/

以下のjavascriptに記述すれば、textarea内のescキー入力は無視されます。

if( document.all ){

document.onkeydown= keyEventIE;

}

function keyEventIE(){

if((window.event.keyCode == 27)&&(document.activeElement.type == "textarea" )) return false;

}

◎質問者からの返答

なるほど、エレメントタイプなんて取れるんですね。勉強になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ