在LinkBut​​ton上按Enter键会触发DefaultButton而不是聚焦LinkBut​​ton

时间:2013-08-02 07:50:17

标签: javascript asp.net webforms defaultbutton

我们有一个代码:

<asp:Panel runat="server" DefaultButton="ButtonNext">
    ...a lot of different controls...
    <asp:Button runat="server" ID="ButtonPrev" OnClick="ButtonPrev_OnClick" Text="Prev"/>
    <asp:Button runat="server" ID="ButtonNext" OnClick="ButtonNext_OnClick" Text="Next"/>
</asp:Panel>

当焦点放在ButtonPrev并按下Enter时,会点击DefaultButton而不是ButtonPrev

enter image description here

我该怎么做才能修改此行为?我正在寻找简单的解决方案。

我知道我可以在ButtonPrev中包裹Panel

<asp:Panel runat="server" DefaultButton="ButtonNext">
    <asp:Panel runat="server" DefaultButton="ButtonPrev">
        <asp:Button runat="server" ID="ButtonPrev" OnClick="ButtonPrev_OnClick" Text="Prev"/>
    </asp:Panel>
    <asp:Button runat="server" ID="ButtonNext" OnClick="ButtonNext_OnClick" Text="Next"/>
</asp:Panel>

这是一个解决方案,但它会导致样式问题(额外的div)。

我知道我可以使用JavaScript:

<asp:Panel runat="server" DefaultButton="ButtonNext">
    <asp:Button runat="server" ID="ButtonNext" OnClick="ButtonNext_OnClick" Text="Next"/>
    <asp:Button runat="server" ID="ButtonPrev" CssClass="DisableDefaultButton" OnClick="ButtonPrev_OnClick" Text="Prev"/>
</asp:Panel>

<script type="text/javascript">
    $('.DisableDefaultButton').on('keypress',
        function(e) {
            var code = (e.keyCode ? e.keyCode : e.which);
            if (code == 13) { //Enter keycode
                $(this).click();
                e.preventDefault();
            }
        }
    )
</script>

我现在正在使用此解决方案,但我不喜欢它。

有什么我没看到的吗?

0 个答案:

没有答案