我有两个带有相应两个按钮的TextBox。我希望当TextBox具有焦点并且用户点击Enter时,执行事件处理程序后面的相应Button的代码就好像被单击一样。这是一个示例代码:
.aspx的:
<asp:TextBox ID="TextBox1" runat="server" onkeyup="myfunction1(event)"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button 1" usesubmitbehavior="false" />
<asp:TextBox ID="TextBox2" runat="server" onkeyup="myfunction2(event)"></asp:TextBox>
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button 2" usesubmitbehavior="false" />
<asp:Label ID="Label1" runat="server"></asp:Label>
<script type="text/javascript">
function myfunction1(e) {
if (e.keyCode == 13)
document.getElementById('<%= Button1.ClientID %>').click();
}
function myfunction2(e) {
if (e.keyCode == 13)
document.getElementById('<%= Button2.ClientID %>').click();
}
</script>
代码背后:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Button 1 was clicked";
}
protected void Button2_Click(object sender, EventArgs e)
{
Label1.Text = "Button 2 was clicked";
}
但是当我在任何TextBox中按Enter键时,它总是执行事件处理程序后面的Button1
代码。如果我点击按钮,它显然可以正常工作。
我错过了什么?
答案 0 :(得分:2)
ASP按钮默认呈现为提交按钮。当表单元素处于焦点时,输入keypress
(在keydown
之后,keyup
之前)的默认操作是提交表单。如果HTML表单包含多个提交按钮,则第一个是默认的提交按钮。
将所有这些放在一起,当您使用Enter键keypress
(请记住,keydown
之后,keyup
之前)时,表单将通过默认提交按钮提交({{ 1}})。
您有很多选择来解决问题。我建议使用Button1
代替带有input type="button"
的ASP按钮,并从那里处理点击事件。
答案 1 :(得分:0)
您可以通过将集合放在面板控件中并设置面板的DefaultButton属性来实现您的要求
示例:
<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1" Height="72px">
<asp:TextBox ID="TextBox1" runat="server" onkeyup="myfunction1()"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button 1" />
<asp:TextBox ID="TextBox2" runat="server" onkeyup="myfunction2()"></asp:TextBox>
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button 2" />
</asp:Panel>
答案 2 :(得分:0)
将按钮的UseSubmitBehavior
设置为false
是最简单的解决方案。来自this answer中的link by @jbabey。