【问题标题】:Button OnClick event not firing with one textbox in the form按钮 OnClick 事件未与表单中的一个文本框一起触发
【发布时间】:2011-02-15 20:06:44
【问题描述】:

我在 IE 中遇到了一个非常奇怪的 ASP.NET onclick 事件(其他浏览器似乎没有这个问题)。当表单中只有一个文本框字段时,当您输入文本并按 Enter/Return 时不会触发 onclick 事件。当您单击实际的提交按钮时,该事件会触发。当表单中有两个或更多字段时,按 Enter/Return 即可。

这很奇怪。以为是我IE的问题,但查了其他机器,每台都有同样的问题。

我已经设置了这个非常简单的页面作为测试:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Response.Write(((Button)sender).Text);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtBox1" runat="server"></asp:TextBox>
    <asp:TextBox ID="txtBox2" runat="server" ></asp:TextBox>
    <asp:Button ID="btnSubmit" OnClick="btnSubmit_Click" Text="Submit" runat="server" />
    </div>
    </form>
</body>
</html>

当其中一个文本框被移除时,btnSubmit_Click 事件不会按预期运行。

【问题讨论】:

  • 哪个框架版本?
  • 我刚刚用IE8确认了vs2008中的行为。没有错误。回发发生,但是页面似乎只是重新加载。此外,尽管事件处理程序不执行,但 IsPostBack 变量设置为 true。

标签: asp.net


【解决方案1】:

PanelFormdefaultButton 属性用于确保 Enter Key Submission。通常人们习惯于输入密钥提交,如果它被禁用,有时可能会很烦人。

defaultButton 确实提供了一种在焦点存在时处理页面各个部分的 Enter 键的方法。

来源:multiple submit buttons and the enter key

【讨论】:

  • 设置 defaultButton 可以解决问题。虽然为什么它在页面上存在多个文本框控件时有效,但当只有一个文本框控件存在时,我无法理解。
  • 谢谢!你救了我的一天!我以前从未使用过 defaultButton 属性——我今天学到的新东西!看起来添加 defaultButton 属性会添加 JS,该 JS 会在该字段所关注的表单的按钮上执行单击事件。 @Chris,是的,很奇怪,对于多个文本框,输入键无需设置 defaultButton 属性即可工作。而且奇怪的是这种行为只存在于 IE 中。
  • 有完全相同的问题,defaultButton 完美地解决了这个问题。意味着我必须不必要地向客户端发送一个额外的 div 元素,但我认为这是一个公平的权衡。干杯!
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
相关资源
最近更新 更多