注意: 抱歉,我还没有支持本文的代码(仅限敏感的生产代码)。如果时间允许,我会尝试提供简明的工作样本。我希望发表这篇文章,希望能够在追踪类似问题时向其他人提供提示。
提交后隐藏所有“formScreen”DIV会导致IE9完全崩溃。
最初我定义了一个formScreens变量:
var formScreens = $(".formScreens");
然后打电话:
$(formScreens).hide();
导致IE崩溃。
我也尝试了以下操作,这两个选项也会导致崩溃:
var copyOfFormScreens = $("div.formScreen");
$(copyOfFormScreens).each(function ()
{
$(this).hide(); // Option 2: This fails too.
$(this).css("display", "none"); // Option 3: This fails too.
});
崩溃时IE返回以下内容:
Problem signature: Problem Event Name: APPCRASH Application Name: IEXPLORE.EXE Application Version: 9.0.8112.16496 Application Timestamp: 51a55c6d Fault Module Name: MSHTML.dll Fault Module Version: 9.0.8112.16496 Fault Module Timestamp: 51a55ff0 Exception Code: c00000fd Exception Offset: 0032ef01 OS Version: 6.1.7601.2.1.0.256.48 Locale ID: 3081 Additional Information 1: 39a4 Additional Information 2: 39a4d7f18c1c7c725934453009d2f1b9 Additional Information 3: ddcf Additional Information 4: ddcfafd1b35f05f847ac8d3e7a7bcf12
以下在Visual Studio中调试时:
Unhandled exception at 0x6302EF01 (mshtml.dll) in iexplore.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x02432F68). Unhandled exception at 0x630A172B (mshtml.dll) in iexplore.exe: 0xC0000005: Access violation writing location 0x02430FFC. // This error continued to show when pressing the debug "continue".
答案 0 :(得分:3)
我发现了一个非常简单的解决方法。
在隐藏所需元素之前,我将焦点设置为隐藏的DIV“外部”元素(即隐藏屏幕DIV后仍然可见的元素)。 在我的例子中,我将焦点设置到页面中的第一个容器DIV,结果证明是隐藏DIV的祖先。
了解DIV布局的外观:
<div class="mainContent">
<div class="fromScreen">
</div>
<div class="fromScreen">
</div>
<div class="fromScreen">
</div>
</div>
所以我现在调用的代码是:
$(".mainContent").trigger("focus"); // Call this before the hide.
formScreens.hide(); // Crashes on submit if focus is not set to higher element first.
如果在隐藏之前隐藏具有焦点的元素的DIV会导致问题,请将焦点移动到隐藏在DIV之外的元素。
的第一个回复的启发答案 1 :(得分:0)
我也有一个解决方法。如果将“visibile”CSS属性显式设置为“Visible”值而不是隐藏外部div(将Visible设置为Collapse),则可以正常工作。如果没有这一步,IE就会崩溃。
但是此解决方案在其他浏览器中不起作用,因为内部内容仍然可见。所以,我只是检测浏览器类型而不是在IE中我将内部DIV的可见性设置为“可见”,在其他浏览器中将其设置为“继承”。
IE的行为很奇怪,因为它会像我原先预期的那样隐藏整个内容,但逻辑上的工作是保持内部内容在其他浏览器中可见。
崩溃是IE中的一个错误,它仍然存在于IE11中。
IE的例子:
<div id="outerDiv">
<div style="visibility:visible">To hide</div>
</div>
其他浏览器的示例:
<div id="outerDiv">
<div style="visibility:inherit">To hide</div>
</div>
现在将“outerDiv”可见性设置为折叠。