2012年1月10日火曜日

ASP.NET Enterキーを無効にする方法

Enterキーを無効にする方法として
以下のようなjavascriptを差し込む方法がよく紹介されていますが、

<SCRIPT LANGUAGE=javascript>
    <!--
    //Enterキー無効処理
    document.onkeypress = enter;
    function enter(){
        if( window.event.keyCode == 13 ){
            if( window.event.srcElement.type == 'text'){
                return false;
            }
        }
    }
    //-->
</SCRIPT>

ASP.NET 3.5、IIS7、マスターページ、AjaxControlToolkit 3.0 という環境でヘッダのContetPlaceHolderに上記javascriptを記述しても動作しませんでした。
(※そもそも alert('test'); は動作するけど alert("test"); は動作しないというおかしな状況で、 なぜ動作しないのか不明です。分かる方がいたら教えていただけますと幸いです。)


今回はダミーボタンを作成することでEnterキーを無効にする方法を紹介いたします。
EnterキーでのPOST動作はform内に記述された最初のsubmitボタンに割り当てられます。
(※詳細な条件は後日手の開いている時にでも調べます)
なので、ボタンが押されても実行されないボタンを用意することで、Enterキーによるポストを無効にできます。

まず、aspxページにボタンコントロールを配置し(その他のボタンより上部に)、
ButtonDummyのような適当な名前を割り当てて、EnableプロパティをFalseにします。
また、このボタンが見えてしまうと見栄えが悪くなるのでスタイルシートで
display:none;
としておきます。
これだけだとなぜかIEでEnterが無効にならなかったのですが、
コードビハインド側で(C#)以下の記述を加えてダミーボタンをデフォルトボタンにすることで動作するようになりました。

this.Form.DefaultButton = this.ButtonDummy.UniqueID;


理解が深くないままの解決ですが、取り急ぎメモまで。

1 件のコメント:

  1. うまくいきました!
    他のサイトでよく紹介されている、javascriptでキーダウンイベントを無効にする方法ですとダメだったのですが、こちらで紹介されている方法で、うまくいきました。
    ありがとうございました。

    返信削除