按下回车键会触发按钮点击事件 - 但我不希望如此。

9
我有一个真正的难题:我有一个页面上有几个控件和一两个ASP:Button。当我在一个控件中,按下Enter键时,它会像我点击提交按钮一样,但实际上此时我不想这样做。
这个按钮不在一个设置了DefaultButton的ASP:Panel中,它没有OnClientClick属性,我看不到任何监视Enter键的JavaScript...为什么它会触发?
如果我创建一个标准的.ASPX页面,并在上面放置一个文本框和一个按钮,运行它并按下Enter键,按钮将被忽略,即单击事件不会触发。这是我期望的行为,但我没有得到。
简而言之,还有什么原因会导致按钮认为它是页面的默认按钮?
谢谢,
Mike 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;
    }

当我运行页面并在文本框中输入一些文本,然后按下回车键时——哎呀,看看这个:在IE 8中,按钮事件被忽略了,例如页面只是重新加载,但在FF中,它会提交表单... 嗯嗯嗯。
6个回答

19

通常

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

可以使用此方法。但是您可能需要在应用程序中禁用退格键,这可以将您带回最近访问的页面之一。


1
我认为值得注意的是,如果您使用了 UseSubmitBehavior="false",它不仅会阻止回车键的响应,而且当您单击按钮时,它还会阻止代码后台中的按钮单击事件被触发,这可能不是您想要的结果。 - Hawkeye

9

我相信(并可能需要更正),但如果您有一个带有提交类型的输入按钮的表单,那么当您按下回车键时,它将触发该按钮的点击。


我设置的测试页面也发出了一个<input type="submit"...>,但是它并没有触发按钮提交 :-s。 - Mike Kingscott
请查看我的答案,了解IE8和FF之间的区别...非常奇怪。 - Mike Kingscott

4
如果您不想让回车键触发操作,可以在页面中添加以下JavaScript代码:
if (window.event.keyCode == 13)
{
    event.returnValue=false;
    event.cancel = true;
}

您需要在页面的<body>标签上使用OnKeyDown处理程序调用此函数。


3

请查看我的答案,了解IE8和FF之间的区别...非常奇怪。 - Mike Kingscott

1

我实际上已经在Firebug中尝试过它,似乎这是标准的浏览器行为,即它与JavaScript或ASP无关。如果您有提交按钮和文本框,则只需按Enter键即可提交。将输入类型更改为按钮以避免此问题。


请查看我的答案,了解IE8和FF之间的区别...非常奇怪。 - Mike Kingscott

0

) 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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接