Как установить кнопку по умолчанию для TextBox в ASP.Net? - PullRequest
4 голосов
/ 03 апреля 2012

У меня есть страница с двумя кнопками, btnSearch и btnAddUser. Страница aspx, как показано ниже. Как видите, кнопка по умолчанию btnAddUser. Но я хотел бы установить для кнопки по умолчанию btnSearch, когда я что-то набираю в текстовом поле txtFilter. Я добавил 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;
                }
            }
        }

UPDATE: После поиска в Google я нашел решение, как показано ниже. Кажется, работает. Но это не работает на 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;
                }
            }
        }

Ответы [ 2 ]

12 голосов
/ 04 апреля 2012

Вам не нужен 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>
0 голосов
/ 03 апреля 2012

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>
...