示例 Visual Studio 2008 ASP.NET 3.5 项目:源代码
代码
<form id="form1" runat="server">
<asp:ScriptManager runat="Server" EnableScriptGlobalization="true"
EnableScriptLocalization="true" ID="ScriptManager1" ScriptMode="Debug" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" RenderMode="Inline">
<ContentTemplate>
<div runat="server">
test
<br />
<br />
<asp:TextBox ID="TB1" runat="server" AutoPostBack="True" OnTextChanged="UIDataChanged" />
<br />
<asp:TextBox ID="TB2" runat="server" AutoPostBack="True" OnTextChanged="UIDataChanged" />
<br />
<asp:TextBox ID="TB3" runat="server" AutoPostBack="True" OnTextChanged="UIDataChanged" />
<br />
<asp:TextBox ID="TB4" runat="server" AutoPostBack="True" OnTextChanged="UIDataChanged" />
<br />
<br />
<asp:Label ID="Label1" runat="server" Text="Counter"></asp:Label>
<br />
<br />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</form>
基本上我正在将应用程序从 IE6 转换到 IE8。我遇到了一个我无法解决的情况。我到处寻找并发现了一些文章,但没有足够详细的。
基本上在示例项目中,您会发现 4 个文本框,每个文本框都配置为AutoPostBack="true"
并触发一个示例OnTextChange="UIDataChanged"
事件。
我强制使用 IE8 渲染模式:<meta http-equiv="X-UA-Compatible" content="IE=8" />
重现错误:
注意:我将文本框 1 到 4 称为 TB1、TB2 等。
- 启动 IE8 和 TAB 到 TB1 输入一些文本。
- 再次按 TAB,您会注意到这会触发回发并将光标返回到 TB1。注意:我还没有做任何花哨的事情来保持光标位置。
- 再次按 TAB 会将您带到 TB2,您可以在其中输入一些文本。
- 再按一次 TAB 后,又发生一次回发,光标跳到 TB3。但这就是问题所在:无法进行进一步的编辑,并且如果您连续 TAB,您将不再移动任何文本框。
更新1:
在 Visual Studio 2010 和 IE9 浏览器中测试了上述内容。
测试用例 1:
- 浏览器模式:IE=9
- 框架:4.0
- 结果 - 文本字段上的选项卡按预期工作
测试用例 2:
- 浏览器模式:IE=9
- 框架:3.5
- 结果 - 文本字段上的选项卡按预期工作
测试用例 3:
- 浏览器模式:IE=8
- 框架:4.0
- 结果 - 在第二个 TextBox 之后断开的制表符
测试用例 4:
- 浏览器模式:IE=8
- 框架:3.5
- 结果 - 在第二个 TextBox 之后断开的制表符
根据上述发现,似乎问题可能出在 Internet Explorer 渲染引擎中。