0

示例 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 渲染引擎中。

4

1 回答 1

0

根据调查结果,我得出的结论是,这绝对是 IE8 渲染问题。它的行为与 IE7 和 IE9 不同。

根据进一步调查,IE7 和 IE8 在渲染方面的差异也太大,无法实际执行 IE7 模式。强制执行 IE7 模式将解决选项卡问题,但可能会引入更多复杂性,具体取决于其他样式“修复”以适应 IE8。

对于将来的更新,如果 Internet Explorer 9 确实可用或者是每个用户的标准操作环境的一部分,那么我建议强制执行 IE9 渲染或 IE'edge' 以符合标准。

于 2012-07-04T01:08:35.030 回答