【问题标题】:Enter key triggering button click - but I don't want it to输入键触发按钮单击 - 但我不希望它
【发布时间】:2010-02-02 15:08:23
【问题描述】:

这里有一个真正令人头疼的问题:我有一个页面,上面有几个控件,以及一个或两个 ASP:Button。当我在一个控件中并按下 Enter 键时,它就像我单击了提交按钮,而我此时实际上并不想这样做。

该按钮不在设置了 DefaultButton 的 ASP:Panel 中,它没有 OnClientClick 属性,我看不到任何 JavaScript 监视 Enter 键...为什么会触发?

如果我创建一个标准的 .ASPX 页面并在其上放置一个文本框和一个按钮,运行它并按 Enter 键,该按钮将被忽略,例如点击事件不会触发。这是我期望的行为,但没有得到。

简而言之,还有什么可能导致按钮认为它是页面的默认按钮?

谢谢,

迈克·K。


好的,这是我的测试页标记:

<p><asp:Label ID="uxNameL" runat="server" AssociatedControlID="uxName">Name</asp:Label><asp:TextBox ID="uxName" runat="server"></asp:TextBox></p>
<p><asp:Button id="uxSubmit" runat="server" Text="Submit" onclick="uxSubmit_Click" /></p>
<asp:Literal ID="uxOut" runat="server" EnableViewState="false"></asp:Literal>

以下是代码中发生的情况:

    protected void uxSubmit_Click(object sender, EventArgs e)
    {
        uxOut.Text = uxName.Text;
    }

当我运行页面时,在文本框中输入一些文本并按 Enter - 哈,你会看到:在 IE 8 中,按钮事件被忽略,例如页面只是重新加载,但在 FF 中,它提交表单...

嗯嗯。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    通常

    <asp:Button ID="button" UseSubmitBehavior="false"/> 
    

    有效。但是您可能必须在应用程序中禁用退格键,这会使您返回最近历史记录中的一页。

    【讨论】:

    • 我认为还需要注意的是,如果你使用UseSubmitBehavior="false",它不仅会阻止它响应回车按钮,还会阻止在代码中引发按钮单击事件当您单击按钮时,这可能不是预期的结果。
    【解决方案2】:

    我相信(并且有待更正),但如果您有一个表单,带有一个提交类型的输入按钮,那么当您按 Enter 时,它会触发该按钮的点击。

    【讨论】:

    • 我设置的测试页面也发出了一个 ,但这并没有触发按钮提交:-s
    • 请查看我自己的答案,了解 IE8 和 FF 的差异......最奇怪。
    【解决方案3】:

    如果你不想回车键触发,也许你可以在你的页面中添加这个js代码:

    if (window.event.keyCode == 13)
    {
        event.returnValue=false;
        event.cancel = true;
    }
    

    您需要在页面的&lt;body&gt; 标记上使用 OnKeyDown 处理程序调用此函数。

    【讨论】:

      【解决方案4】:

      这是 HTML 的工作方式,如果 &lt;FORM&gt; 包含 &lt;INPUT TYPE='Submit'&gt;,则按 Enter 键将提交表单。 解决方案:How to prevent ENTER keypress to submit a web form? 或此处:http://www.cs.tut.fi/~jkorpela/forms/enter.html

      【讨论】:

      • 请查看我自己的答案,了解 IE8 和 FF 的差异......最奇怪。
      【解决方案5】:

      我现在实际上已经尝试在 Firebug 中使用它,这似乎是一种标准的浏览器行为,即它与 javascript 或 ASP 无关。如果你有提交按钮和一个文本框,那么它只是在输入时提交。将输入的类型更改为按钮以避免它。

      【讨论】:

      • 请查看我自己的答案,了解 IE8 和 FF 的差异......最奇怪。
      【解决方案6】:

      ) HTML 代码:

      <form method="post" action="add_data.php" id="master_form">
      <input type='text' name='user-mail' />
      <input type="button" value="Submit"  onclick="submitform();" />
      </form>
      

      javascript代码:

      function submitform()
      {
      document.getElementById('master_form').submit();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多