IE 9和IE 10不能不时地将文本输入到输入文本框中

Pya*_*ung 26 html javascript internet-explorer internet-explorer-9 internet-explorer-10

里面有一个iframe的网页.有时,iframe内的输入文本框控件被锁定/冻结.用户无法在其中输入文本.但文本框可以聚焦而不是褪色.没有代码可以禁用输入控件,但这并不总是发生.到目前为止,这只发生在IE 9和IE 10中.Firefox和Chrome都可以.

页面工作原理的简要说明如下:

  • 父页面上有一个按钮.通过单击它将从头开始构建一个iframe并显示它.这是通过Javascript完成的.

  • 同样,iframe上有一个按钮可以关闭它.通过单击它将
    从父页面的DOM中删除iframe.

如果您需要更多信息,请告诉我.提前致谢.

Wil*_*ung 35

这个错误很烦人,更糟糕的是我们在google上找到的信息非常少.

微软只有一个关于IE9的链接,但问题仍然存在于IE10/IE11中,并且更容易重现.

我刚刚创建了一个小提琴来描述这个问题

http://jsfiddle.net/WilliamLeung/T3JP9/1/

为什么M $多年来难以解决这个问题?

应该有三种解决方法

  1. 每次我们使用iframe修改DOM时重置焦点
  2. 或安排一个"无所事事"耗时的任务,这可能会让IE神奇地回应鼠标事件,我无法告诉你为什么,也许M $可以

    设置耗时任务的示例代码

    setInterval(function () {
        var loopCount = 10000;
        var x = 0;
        for (var i = 0; i < loopCount; i++) {
            x = (x + Math.random() * 1000) >>> 0;
        }
        return x;
    }, 1000);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 或者在从文档中删除DOM内容之前重置它

    someDivWithIframe.innerHTML = "";
    $(someDivWithIframe).remove();
    
    Run Code Online (Sandbox Code Playgroud)

    我不确定它是否对所有情况都有帮助,你应该试一试


JcA*_*pes 5

jQuery的解决方案适用于IE11,而不是其他解决方案.

$(theIframeElement).empty().remove();

在IE9/10上工作的另一个解决方案是在删除之前将iframe src设置为空

iframe.src=""

但是,如果您使用较旧的jQuery版本<1.11.1,则会在IE11上导致异常"拒绝访问"

一些链接:有关信息,jQuery还为其在iframe中显示内容的Dialog.js插件修复了此问题:http://bugs.jqueryui.com/ticket/9122

jQuery错误修复IE11"访问被拒绝"错误:http://bugs.jquery.com/ticket/14535