IE9中的Jquery错误

时间:2012-08-24 19:50:38

标签: javascript jquery jquery-plugins internet-explorer-9

我正在使用Jquery 1.8.0创建横幅旋转器插件,我的代码在Firefox和Chrome中正常工作,但在IE9中神秘地无法正常工作 没有明显的理由。我的意思是,横幅根本不会显示,也没有错误。它根本就不存在。

所以我在我的代码中添加了一些警告(更改为console.log)以跟踪代码失败的位置,我想我找到了。

页面上的

html代码:

<div class="content-top">
    <div id="bannerRotator"></div>
</div>
<div class="content-bot">
</div>

页面上的javascript代码:

$(document).ready(function() {
    console.log("Before banner rotator");
    $("#bannerRotator").BannerRotator({
        BRBannerImages: ["../Images/Banners/banner1.jpg",
                        "../Images/Banners/banner1-b.jpg",
                        "../Images/Banners/banner2.jpg",
                        "../Images/Banners/banner2-b.jpg",
                        "../Images/Banners/banner3.jpg",
                        "../Images/Banners/banner3-b.jpg",
                        "../Images/Banners/banner4.jpg",
                        "../Images/Banners/banner4-b.jpg",
                        "../Images/Banners/banner5.jpg",
                        "../Images/Banners/banner5-b.jpg",
                        "../Images/Banners/banner6.jpg",
                        "../Images/Banners/banner6-b.jpg"]
    });
    console.log("After banner rotator");

    $("#white-bg").css({ height: $(document).height() });

    console.log("After white bg");
});

banner rotator插件:

(function($) {

    $.fn.BannerRotator = function(options) {
        console.log("banner creation: begin");
        var opts = $.extend($.fn.BannerRotator.defaults, options);
        console.log("before foreach");
        return this.each(function() {
            alert("before this");
            // Commented out code
            alert("banner creation: end");
        });
        console.log("after foreach");
    };

    $.fn.BannerRotator.defaults = {
       // Default settings
    };

    // Other functions

})(jQuery);

执行此代码时,alert("after foreach");将永远不会显示,这是完全正常的。事情有时它会全部起作用,但在其他时候,我得到的最后一个警告是alert("before this");然后我直接进入alert("After banner rotator");

我看到的最后一件事是,当插件工作时,content-bot中的内容可以在警告框后面看到,而当插件失败时,我看不到content-bot,但是显示bannerRotator之前的所有内容。这让我觉得它可能与$(document).ready函数有关,因为看起来当插件失败时,它失败了,因为$(document).ready过早发射。

更新

这是我注意到的另一件事。当我第一次打开我的页面时,我的横幅没有出现。没有。无论我刷新多少时间,都还没有。但是当我按F12进入开发人员工具窗口时,横幅就可以了。它仍然不能一直工作,但大部分时间都是如此。

没关系那部分。导致该问题的是console.log。见Why does JavaScript only work after opening developer tools in IE once?

1 个答案:

答案 0 :(得分:2)

尝试使用Jquery 1.7.2

Ie9上的document.ready事件有一个回归

http://bugs.jquery.com/ticket/12282