Reputation: 1120
I'm using Jquery 1.8.0 to create a banner rotator plugin and my code works correctly in Firefox and chrome, but mysteriously won't work sometimes in IE9 for no apparent reasons. I mean, the banner will simply not show up, and no errors either. It's simply not there.
So i added some alert (changed to console.log
) to my code to trace where the code fails, and I think I found where.
html code on page:
<div class="content-top">
<div id="bannerRotator"></div>
</div>
<div class="content-bot">
</div>
javascript code on page:
$(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 plugin:
(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);
When executing this code, the alert("after foreach");
will never show up and that is totally normal. The thing is sometimes it will all work, but at other times the last alert I get is alert("before this");
then I get directly to the alert("After banner rotator");
.
One last thing I saw is that when the plugin works, the content in content-bot
can be seen behind the alert box, while when the plugin fails, i can't see the content-bot
, but everything before the bannerRotator
is displayed. This led me to think that it maybe related to the $(document).ready
function, since it seems that when the plugin fails, it fails because the $(document).ready
fired too early.
UPDATE
Here's another thing I noticed. When I open my page for the first time, my banner doesn't appear. Nothing. No matter how much time I refresh, there's still nothing. But when I press F12 to get the Developer Tools window, the banner works. It still doesn't work all the time, but most of the time it does.
Nevermind about that part. It was the console.log
that caused that problem. See Why does JavaScript only work after opening developer tools in IE once?
Upvotes: 1
Views: 2367
Reputation: 438
Try with Jquery 1.7.2
There is a regression on document.ready event on Ie9
http://bugs.jquery.com/ticket/12282
Upvotes: 2