Javascript如何使用attach事件使此脚本与IE8及以下版本兼容

时间:2014-01-17 09:29:44

标签: javascript internet-explorer-8

如何在IE8中使用以下内容?我假设从其他线程我使用if else语句。只是不确定它应采取的形式

提前致谢

document.addEventListener("DOMContentLoaded", function() { 
    var captions = document.getElementsByClassName("block1");
    var newlabel = document.getElementsByClassName("block2");
    for (var i = 0, c=captions.length; c>i; i++) {
       captions[i].style.display = "none";
    }
    for (var i = 0, n=newlabel.length; n>i; i++) {
        newlabel[i].style.display = "none";
    }

})();

1 个答案:

答案 0 :(得分:0)

有四个问题需要处理:

  1. 删除不正确的()(即使不使用IE8)。

    解决方案:只需删除它们。

  2. 必要时使用attachEvent代替addEventListener

    解决方案:根本不要使用事件,也不要检测你拥有的事件。

  3. 处理IE8没有DOMContentLoaded的事实。

    解决方案:将脚本放在HTML的末尾而不是使用事件。或者使用window.load,但这种情况发生得非常晚。

  4. 处理IE8没有getElementsByClassName的事实。

    解决方案:改为使用querySelectorAll,IE8

  5. 同样,处理#2和#3的最简单方法是将代码简单地放在文档最末端的脚本标记中,就在结束</body>元素之前。然后你根本不必使用事件,只需运行代码;元素将存在并准备好编写脚本:

    <!-- content... -->
    <script>
    (function() {
        var i, c, n;
        var captions = document.querySelectorAll(".block1");
        var newlabel = document.querySelectorAll(".block2");
        for (i = 0, c = captions.length; c > i; i++) {
            captions[i].style.display = "none";
        }
        for (i = 0, n = newlabel.length; n > i; i++) {
            newlabel[i].style.display = "none";
        }
    })();
    </script>
    </body>
    </html>
    

    如果你真的想让它基于事件,那么:

    function handler() {
        var i, c, n;
        var captions = document.querySelectorAll(".block1");
        var newlabel = document.querySelectorAll(".block2");
        for (i = 0, c = captions.length; c > i; i++) {
            captions[i].style.display = "none";
        }
        for (i = 0, n = newlabel.length; n > i; i++) {
            newlabel[i].style.display = "none";
        }
    }
    if (document.addEventListener) {
        document.addEventListener("DOMContentLoaded", handler);
    }
    else if (window.attachEvent) {
        window.attachEvent("onload", handler);
    }
    

    (请注意,在这两种情况下,我只在函数的顶部声明了icn一次。这就是您的代码所做的事情,因为{ {3}},所以...)