5

キーに置き換えるJavaScriptのスクリプトがEnterありTABます:

function ReplaceEnterWithTab() { if (event.keyCode == 13) event.keyCode = 9; return false; }

そして、私はそれを次のように使用します:

txt.Attributes.Add("OnKeyDown", "ReplaceEnterWithTab();");

このコードはうまく機能します。今度は、属性を追加する必要のない jQuery を使用したスクリプトを開発したいとOnKeyDown考えています。このサンプル ページを検討してください。

<form id="form1" runat="server">
<div>
    <asp:TextBox ID="TextBox1" runat="server" CssClass="EntTab"></asp:TextBox>
    <br />
    <br />
    <asp:TextBox ID="TextBox2" runat="server" CssClass="EntTab"></asp:TextBox>
    <br />
    <br />
    <asp:DropDownList ID="DropDownList1" runat="server" CssClass="EntTab">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</div>
</form>

私はこのコードを書きます:

$(document).ready(function () {

        $('.EntTab').on('keydown', function (e) {
            if (e.keyCode == 13) e.keyCode = 9;
        });

    });

問題は、キーを押したときにページEnterポストバックが発生することです。この問題を解決するにはどうすればよいですか?TextBox1Button1

ありがとう

4

2 に答える 2

7

試す:

$(document).ready(function () {
    $(".EntTab").bind("keypress", function(e) {

        if (e.keyCode == 13) {
            var inps = $("input, select"); //add select too
            for (var x = 0; x < inps.length; x++) {
                if (inps[x] == this) {
                    while ((inps[x]).name == (inps[x + 1]).name) {
                    x++;
                    }
                    if ((x + 1) < inps.length) $(inps[x + 1]).focus();
                }
            }   e.preventDefault();
        }
    });
});

そのようなことを意味しましたか。

于 2012-05-02T06:39:49.117 に答える
2

イベントの伝播をキャンセルするのを忘れましreturn falseた。キーダウン コールバックに追加します。

$(document).ready(function () {
    $('.EntTab').on('keydown', function (e) {
        if (e.keyCode == 13) e.keyCode = 9;
        return false;
    });
});

また、ASP.NET の Button タグには、デフォルトでUseSubmitBehavior フラグが trueに設定されているため、ボタンがタグとしてレンダリングされますinput type="submit"。次の回答で説明されているような動作を得るには、false に設定してみてください

于 2012-05-02T06:39:39.567 に答える