【问题标题】:Click enter key for submit点击输入键提交
【发布时间】:2025-12-19 03:45:11
【问题描述】:

我在参加活动时遇到问题。我已阅读有关此问题的多个帖子,但尚未找到解决方案。 该项目必须在 Chrome、FF 和 IE (8,9,10,11) 中运行。目前它在任何浏览器中都不起作用。

我在一个页面上有两个表单的注册/登录

<asp:Panel ID="pnlRegister" runat="server"BorderWidth="0">
     <table class="register">
          <tr align="left">
               <td class="row_left_heading" colspan="2">
                    <asp:TextBox ID="txtFirstName" runat="server" CssClass="textbox_required"></asp:TextBox>
               </td>
          </tr>
          <tr>
               <td class="row_left">
        Last name
                </td>
                <td class="row_right">
                     <asp:TextBox ID="txtLastName" runat="server" CssClass="textbox_required"></asp:TextBox>
                </td>
           </tr>

.................................. 有更多的输入数据和验证文件 ....................................

-Register button

<asp:ImageButton runat="server" ValidationGroup="group_registration" 
  ID="btnRegister" CssClass="btnDownload"      
  ImageUrl="../images/download_now_blue_clear.png" 
  OnClick="btnRegister_Click" />

在页面右侧,有登录元素

<tr align="left">
     <td class="row_left">
          Email
     </td>
     <td>
          <asp:TextBox ID="txtUserName" runat="server"
             CssClass="textbox_required"></asp:TextBox>
     </td>
</tr>
<tr>
     <td class="row_left">
           Password
     </td>
     <td>
           <asp:TextBox ID="txtPassword" runat="server"
               CssClass="textbox_required" TextMode="Password"></asp:TextBox><br />
     </td>
 </tr>

...和登录按钮

<asp:ImageButton runat="server" ValidationGroup="group_login"
    ImageUrl="/forum/forum_images/button_login.png"
    ID="btnLogin" OnClick="btnLogin_Click"
    />

以上是输入数据的表单,通过鼠标按钮单击时一切正常。

进入按钮代码:

   /// <summary>
    /// Sets up javascript events that handle posting data using enter key
    /// </summary>
    private void SetupJSEventHandlers()
    {
        txtUserName.Attributes.Add("onfocus", "SetActiveForm('login');");
        txtUserName.Attributes.Add("onblur", "DeactivateForm();");

        txtPassword.Attributes.Add("onfocus", "SetActiveForm('login');");
        txtPassword.Attributes.Add("onblur", "DeactivateForm();");

        txtFirstName.Attributes.Add("onfocus", "SetActiveForm('register');");
        txtFirstName.Attributes.Add("onblur", "DeactivateForm();");

        txtPhone.Attributes.Add("onfocus", "SetActiveForm('register');");
        txtPhone.Attributes.Add("onblur", "DeactivateForm();");

        txtEmail.Attributes.Add("onfocus", "SetActiveForm('register');");
        txtEmail.Attributes.Add("onblur", "DeactivateForm();");
    }

然后抓住:

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ......
            SetupJSEventHandlers();
        }
        else
        {
            if (Request[ACTIVE_FORM_NAME] == "register")
            {
                btnRegister_Click(null, null);
            }
            else if (Request[ACTIVE_FORM_NAME] == "login")
            {
                btnLogin_Click(null, null);
            }
    txtFirstName.Focus();
    }

我尝试过的另一个代码片段(但失败了):

private void textBox_KeyDown(object sender, KeyEventArgs e) {
     if (e.KeyCode == Keys.Enter)
          {
               if (Request[ACTIVE_FORM_NAME] == "register")
          {
               btnRegister_Click(null, null);
          }
          else if (Request[ACTIVE_FORM_NAME] == "login")
          {
                btnLogin_Click(null, null);
          }
      }
 }

【问题讨论】:

  • 修改你的问题标题,让它更清晰。

标签: c# javascript jquery asp.net .net


【解决方案1】:

您可以通过使用面板或表单的DefaultButton 属性来完成此操作。您可以为不同的面板设置不同的DefaultButton

 <asp:Panel runat="server" ID="pnlRegister" DefaultButton="btnRegister">

【讨论】:

  • 当我有一个表单时没关系,但如果我有两个具有相同默认按钮的表单,我会回到同样的问题
  • 如果它的形式不同,您可以更改按钮的ID。
【解决方案2】:

您在这里重新创建了许多内置的 ASP.NET 功能。您应该删除您的事件处理程序和 ACTIVE_FORM_NAME 属性。

相反,将每个“表单”放入单独的 &lt;asp:Panel&gt; 元素中。

&lt;asp:Panel&gt; 元素有一个名为DefaultButton 的属性。将这些中的每一个设置为相关的&lt;asp:Button&gt; ID。

然后,ASP.NET 将处理捕获回车键的客户端工作,并且将自动调用相关的 btnX_Click() 事件处理程序。

【讨论】:

    【解决方案3】:

    在面板中使用 DefaultButton 选项

    <asp:Panel ID="pnlRegister" runat="server"BorderWidth="0" DefaultButton="btnRegister">
     Some Content
    </asp:Panel>
    
    <asp:Panel ID="pnlLogin" runat="server"BorderWidth="0" DefaultButton="btnLogin">
     Some Content
    </asp:Panel>
    

    【讨论】:

      最近更新 更多