2014年1月16日木曜日

ASP.NET EnterキーでSubmitさせないようにする。

前回ASP.NET TextBoxでEnterキーやBackSpaceキーを入力できないようにする。 を書きましたが…
submitを発生させるコントロールってtextboxだけじゃないんですね~
checkboxやらradioでもsubmitが発生して、form内の一番最初に配置しているbuttonのclick処理が走ってしまいます。
全部のコントロールにonKeyPressなんて書いてられないので、ほかの方法で実装します。

以下その方法です。

formにダミーボタンを配置しOnClientClickでsubmitさせないようにし、style="display:none"で非表示にします。
つぎにformタグのdefaultbuttonに作成したダミーボタンを指定します。
これですべてのコントロールでenterキーを押されてもsubmitを無効にすることができます。

マスターページを使用していれば、マスターページに実装するだけで済みます。
<form id="form1" runat="server" defaultbutton="DummySubmitButton">
    <asp:Button ID="DummySubmitButton" runat="server" Text="Button" OnClientClick="return false;" style="display:none"  />
    ・・・以下略
</form>

2014年1月10日金曜日

ASP.NET TextBoxでEnterキーやBackSpaceキーを入力できないようにする。

2014年初の投稿です。
昨年からASP.NETのお仕事が数件ほど続いています。

Webアプリを作っている人にとっては常識なのかもしれませんが、
TextBoxでEnterキーを押すとSubmitされてしまう場合があります。
またReadOnlyなTextBoxでBackSpaceキーを押すと「戻る」ボタンと同じ動きをしてしまいます。

JavaScriptでTextBoxにEnterキーや、ReadOnlyなTextBoxにBackSpaceキーを入力できないようにします。
EnterキーはKeyCode=13、BackSpaceキーはKeyCode=8です。
ReadOnlyな場合はEnterキー、BackSpaceキーを入力できないようにします。
ReadOnlyでない場合はEnterキーのみを入力できないようにします。

JavaScript
function cancelSubmit() {
    if (window.event.srcElement.readOnly == false) {
        if (window.event.keyCode == 13) {
            return false;
        }
    }
    else {
        if (window.event.keyCode == 13 || window.event.keyCode == 8) {
            return false;
        }
    }
}
ReadOnlyでないTextBoxの場合はonKeyPressで処理します。
<asp:TextBox ID="TextBox1" runat="server" onKeyPress="return cancelSubmit();" />
ReadOnlyなTextBoxの場合はonKeyDownで処理します。
<asp:TextBox ID="ReadOnlyTextBox1" runat="server" ReadOnly="True" onKeyDown="return cancelSubmit();" />


コチラの方法の方が楽です↓↓
ASP.NET EnterキーでSubmitさせないようにする。