【问题标题】:How to set the default button for a TextBox in ASP.Net?如何在 ASP.Net 中为 TextBox 设置默认按钮?
【发布时间】:2012-04-03 18:14:26
【问题描述】:

我的页面有两个按钮,btnSearch 和 btnAddUser。 aspx 页面如下。如您所见,默认按钮是 btnAddUser。但是当我在文本框 txtFilter 中键入内容时,我想将默认按钮设置为 btnSearch。我添加了一个 JavaScript 函数 clickButton,并在 page_load 中添加了以下代码。问题是当我在文本框中输入内容后按回车键时,btnSearch 和 btnAddUser 都被单击了。有什么办法可以让 btnAddUser 不被点击。

 txtFilter.Attributes.Add("onkeypress", "return clickButton(event, '" + btnSearch.ClientID + "')");

<asp:Panel ID="MainPanel" runat="server" DefaultButton="btnAddUser">
    <table align="center" width="900">
        <tr>
            <td align="left" width="70%">
                <asp:TextBox ID="txtFilter" runat="server" Width="200"></asp:TextBox>
                <asp:Button ID="btnSearch" runat="server" Text="Search" 
                    onclick="btnSearch_Click" CausesValidation="false" />
            </td>
            <td align="right" width="30%">
                <asp:Button ID="btnAddUser" runat="server" Text="Add User" Width="85px" 
                    CausesValidation="False" onclick="btnAddUser_Click" />
            </td>
        </tr>
        <tr>
...
</asp:Panel>

function clickButton(e, buttonid) {
            var evt = e ? e : window.event;
            var bt = document.getElementById(buttonid);
            if (bt) {
                if (evt.keyCode == 13) {
                    bt.click();
                    return false;
                }
            }
        }

更新: 谷歌搜索后,我找到了如下解决方案。它似乎工作。但它不适用于 Firefox?有人知道怎么解决吗?

function clickButton(e, buttonid) {
            var evt = e ? e : window.event;
            var keycode = evt.keyCode || evt.which || evt.charCode;
            var bt = document.getElementById(buttonid);
            if (bt) {
                if (keycode == 13) {
                    evt.cancelBubble = true;
                    evt.returnValue = false;
                    if (evt.stopPropagation) {
                        evt.stopPropagation();
                        evt.preventDefault();
                    }
                    bt.click();
                    return false;
                }
            }
        }

【问题讨论】:

  • 此链接可能会对您有所帮助:codeproject.com/Articles/35180/…
  • 您可能想查看 jQuery 的 keypress 事件。它往往更可靠。 api.jquery.com/keypress
  • 对于 firefox,您的标准 CTRL / ALT / SHIFT 可以在 e.originalEvent 中找到。比如,e.originalEvent.shiftKey(其他的可以用firebug查看)

标签: asp.net defaultbutton


【解决方案1】:

您不需要javascript,只需将搜索文本框包装在另一个面板中并设置默认按钮,就像这样(我剥离了表格标签):

  <asp:Panel ID="MainPanel" runat="server" DefaultButton="btnAddUser">
    <asp:Panel ID="searchPanel" runat="server" DefaultButton="btnSearch">
      <asp:TextBox ID="txtFilter" runat="server" Width="200"></asp:TextBox>
      <asp:Button ID="btnSearch" runat="server" Text="Search" 
        CausesValidation="false" onclick="btnSearch_Click" />
    </asp:Panel>
    <asp:Button ID="btnAddUser" runat="server" Text="Add User" Width="85px" CausesValidation="False" onclick="btnAddUser_Click" />
  </asp:Panel>

【讨论】:

  • 我试过了,但是当在文本框中按回车键时,两个按钮都会被点击。
  • 你在 txtFilter 文本框中按下回车键?我在 IE、Firefox、Chrome 中进行了测试,并且只点击了搜索按钮。您能否仅使用此标记制作小项目并进行测试。
  • 刚试过。不知何故,btnSearch 起作用了。但是当我在除文本框之外的任何其他地方按 Enter 键时,没有点击 btnAddUser。
  • 按下回车键时具有焦点的其他控件在哪里?
  • 我的页面中只有一个文本框、一个网格视图和几个按钮。
【解决方案2】:

TextBox 包装在Panel 中,并设置DefaultButton 属性。

<asp:Panel runat="server" DefaultButton="btnSearch">
    <asp:TextBox ID="txtFilter" runat="server" Width="200" />
    <asp:Button ID="btnSearch" runat="server" Text="Search" 
        onclick="btnSearch_Click" CausesValidation="false" />
</asp:Panel>

【讨论】:

    【解决方案3】:

    JavaScript

    <script language="javascript" type="text/javascript">
        function kPress(evnt, ID) {
            var ButtonID = ID.id;
            var btnSearchID = ButtonID.replace('txtFilter', 'btnSearch');
            document.getElementById(btnSearchID).click();
        }
    </script>
    

    HTML

    <asp:TextBox ID="txtFilter" runat="server" Width="200" onkeypress="kPress(event, this);"></asp:TextBox>
    

    【讨论】:

    • 我忘了说,我正在使用母版/内容页面。但是我试过你的方法,不行。
    • 它也适用于内容页面。您是否尝试过在您的 javascript 中设置调试器?
    • 是的。每次我尝试输入内容时,它都会进入 javascript 函数,甚至不会等到我按下回车键。
    • 我只希望当我在文本框中按回车键时点击搜索按钮。否则默认按钮是 btnAddUser。
    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多