通过 select 更改 div 内容的脚本在 Firefox 中不起作用

Script that changes content of a div throught a select doesn't work in Firefox

我的代码的目的是使 div 可见,它与我选择的 select 选项具有相同的 ID。但是还有更多的东西。要使可见的 div 有一个 iframe,必须调整其大小以适应内容。每个 iframe 包含一个 Excel sheet(在 htm 扩展中)。我粘贴了我所有的代码,包括调整大小的功能。这在 Chrome 和 Opera 上完美运行,但在 IE 和 FF 上运行不佳 运行。

当我 select 一个新的 div 时出现问题。在 Chrome 和 Opera 中,当我更改 select 选项时,我看到新的 iframe 正确调整了大小,但在 IE 和 FF 中我看不到任何东西。我已经检查过 select 编辑的 div 的显示属性设置为阻塞,因为它可能是 jQuery 或调整大小功能的问题。

我花了很多时间试图修复它,但我仍然找到了解决方案。

有我的代码:

CSS:

#sheetsContainer div{display: none;}

HTML:

<select id="sheets">
    <option value="sheet1">Sheet 1</option>
    <option value="sheet2">Sheet 2</option>
</select>


<div id="sheetsContainer">
    <div id="sheet1">
        <iframe frameborder="0" onload='javascript:resizeIframe(this);' src="indicadors/2014/1_3_4.htm"></iframe>
    </div>
    <div id="sheet2">
        <iframe frameborder="0" onload='javascript:resizeIframe(this);' src="indicadors/2014/1_3_4_183.htm"></iframe>
    </div>
</div>

JS/jQuery:

    function resizeIframe(obj) {
        obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
        obj.style.width = "100%";
    }

    $("#sheets").change(function(){
        $("#" + this.value).show().siblings().hide();
    });

    $("#sheets").change();

这是一个测试,因为我的真正目的是使用 bootstrap 的选项卡面板而不是下拉菜单 select。我想尽量减少问题,让您更容易理解。事实上,Chrome 和 Opera bootstrap 的选项卡也可以,但它不适用于 IE 和 FF。

感谢大家的帮助!

编辑:

对于 FF 和 IE,我只能看到 selector 的第一个 div。当我切换到另一个 div 时,我什么也看不到,但是如果我再次切换到第一个 div,我就能很好地看到它。在我的代码中,我可以看到 'sheet1' 但看不到 'sheet2'。如果我用 'sheet2' selected 刷新页面,现在我可以看到 sheet2,但是如果我切换到 sheet1,我什么也看不到。

你可以在 https://gpaq.upc.edu//lldades/2014/indicador.asp?index=1_3_4 看到我有什么。将其与 Chrome 和 FF 进行比较以查看问题 ;)

虽然在 IE 和 FF 中分配宽度,但我认为您应该考虑在 pixels.For 示例中分配它,如果 window 的 100% 是 1280 px,则将宽度分配为 1280px 而不是 100 %。我不确定这是否适合您,但它确实对我有用过一次。

对于 Firefox,您需要给它一点时间来加载 iframe。推荐如下:

function resizeIframe(obj) {
    setInterval(function(){resizeIframeNow(obj);},3000); // wait around 3 seconds
}

function resizeIframeNow(obj) {
    obj.style.height = obj.contentWindow.document.body.scrollHeight;
    obj.style.width = "100%";
}

我希望删除 scrollHeight 后的 + 'px'。

对于 IE,我建议使用 window.frameElement(iframe 父级)对象从 iframe 的 HTML 内容调用调整大小函数在你的情况下 HTML 结束时可能 1_3_4_183.html:

....
<script>

var h = document.getElementsByTagName("body")[0].scrollHeight + 30; // add 30 to prevent scrollbar from appearing
window.frameElement.height=h;

</script>

</body>

但要使 IE 正常工作,您仍然需要稍微更改 iframe 设置:

来自

<iframe frameborder="0" onload="javascript:resizeIframe(this);" src="./Llibre de dades_files/1_3_4.html" style="height: 7718px; width: 100%;"></iframe>

<iframe frameborder="0" scrolling="auto" onload="javascript:resizeIframe(this);" src="./Llibre de dades_files/1_3_4.html" height="7718" width="100%"></iframe>

如果您为 IE 定义样式,大小将固定在该大小并且将忽略任何试图更改它的脚本。

如果浏览器是IE,还需要告诉resizeIframe()绕过:

var ie = (navigator.userAgent.indexOf("MSIE") != -1);

function resizeIframe(obj) {
    if (!ie) {
        setInterval(function(){resizeIframeNow(obj);},3000); // wait around 3 seconds
    }
}

function resizeIframeNow(obj) {
    obj.style.height = obj.contentWindow.document.body.scrollHeight;
    obj.style.width = "100%";
}

希望对您有所帮助!