【发布时间】:2012-11-09 22:32:11
【问题描述】:
我刚刚创建了一个新页面,并在其上仅放置了 4 个基本控件,如下所示:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1"
runat="server" Text="Button" />
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
然后加载页面并执行以下步骤:
点击文本框
按 ENTER 键 - 这将导致单击按钮,因为它是面板的默认按钮
在文本框中单击返回
再次按 ENTER 键
此时我无法在文本框中输入任何内容。
我相信它一定与 Panel.DefaultButton 创建的按键处理程序有关。例如,如果它总是返回 false,那么所有击键都会被忽略。
这仅在 IE8 不处于兼容模式时才会发生。在兼容模式下在 Chrome、FireFox 和 IE8 中运行良好。
这似乎是开发人员会做的常见事情,在更新面板中有一个文本框和按钮,并设置了一个默认按钮......但是,我还没有找到很多讨论这个问题的主题,也没有一个解决方案看起来很健壮。我不会想到这么基本的东西,我需要求助于黑客,比如有一个计时器,将焦点转移到另一个控件,然后再返回。
有人对此有强大的修复吗?我正在使用 ASP.NET 3.5,但现在升级到 4.0 对我来说并不容易。
【问题讨论】:
-
添加 OnClientClick="this.focus();"按钮解决了这个问题,但我会等着看是否有人有更好的答案和/或更多信息,然后再将其发布为我的答案。当按钮没有焦点时,IE8 可能存在一些与生成按钮单击事件相关的错误。或者也许是 ASP.NET/IE8 特定的。
标签: asp.net ajax updatepanel