【问题标题】:Jquery bug in IE9IE9中的jQuery错误
【发布时间】:2012-08-24 19:50:38
【问题描述】:

我正在使用 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");
});

横幅旋转插件:

(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,但@之前的所有内容显示 987654331@。这使我认为它可能与$(document).ready 函数有关,因为似乎当插件失败时,它会因为$(document).ready 过早触发而失败。

更新

这是我注意到的另一件事。当我第一次打开我的页面时,我的横幅没有出现。没有。不管我刷新多少时间,还是什么都没有。但是当我按 F12 进入开发者工具窗口时,横幅就起作用了。它仍然不是一直有效,但大多数时候它确实有效。

别管那部分了。是console.log 导致了这个问题。见Why does JavaScript only work after opening developer tools in IE once?

【问题讨论】:

  • 请按 F12 并尝试使用 IE7 和 IE8 仿真,我相信您需要更新此问题的更多信息。 IE9 的效果真的很差,比 8 还差。
  • 其他IE版本呢?它对他们有用吗?请注意,Internet Explorer 没有比其他一些流行的网络浏览器更精确的标准。
  • 所以我用 IE8 和 IE7(真正的浏览器,而不是仿真)尝试了它,它在 IE8 中一直有效,而在 IE7 中永远不会。
  • 如果您认为这是一个时间问题,请尝试使用console.log("debug message") 而不是alert() 进行调试,因为它等待点击不是实时的。
  • DOM 工作时和不工作时有什么区别? (您需要刷新开发者工具视图才能看到最新的 DOM。)

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


【解决方案1】:

尝试使用 Jquery 1.7.2

Ie9 上的 document.ready 事件存在回归

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

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2015-07-25
    • 2011-12-14
    • 2011-11-03
    • 2015-10-27
    相关资源
    最近更新 更多