2012-09-24 47 views
0

我已經根據鍋爐板結構的一個插件這裏建議:jQuery插件的setTimeout IE(Internet Explorer 8中)錯誤

http://markdalgleish.com/2011/05/creating-highly-configurable-jquery-plugins/

插件的響應,因爲我想在Chrome,但我正在逐漸互聯網Explorer和Firefox錯誤

您可以在這裏使用http://websonalized.com/myplugin.php

誤差的MSIE開發者控制檯(調試)查看插件:

無效參數myplugin.js,行84字5

錯誤在Firefox:

錯誤:沒用setTimeout調用

的setTimeout(animateSlide(sliderImage),3000);(失蹤圍繞論點報價?)

THIS IS碼的相關位

... 

this.$slides.each(function(i){ 

    slide_config = $.extend({ 
     duration: 3000, 
     squares: 225, //it will display the closest 'perfect square' number of tiles 
     transition: 'linear' 
    }, $(this).data()); 

    var sliderImage = $(this).find('.slidebg'); 

    ... 

    setTimeout(animateSlide(sliderImage), 3000); 

    function animateSlide(s){ 
     console.log('ANIMATED IMAGE SLIDER ' + i); 
     console.log(s); 

     $(s).show('explode', { pieces: slide_config.squares }, 5000); 
    }; 

    ... 

如果我重寫的setTimeout位的錯誤都不見了:

... 

this.$slides.each(function(i){ 

    slide_config = $.extend({ 
     duration: 3000, 
     squares: 225, //it will display the closest 'perfect square' number of tiles 
     transition: 'linear' 
    }, $(this).data()); 

    var sliderImage = $(this).find('.slidebg'); 

    ... 

    setTimeout(function(){$(sliderImage).show('explode', { pieces: slide_config.squares }, 5000);}, 3000);    


    ... 

但slide_config.squares不對應的值這個實例,而且值是由最後一張幻燈片數據設置的值

this.$slides.each(function(i){ 

    slide_config = $.extend({ 
     duration: 3000, 
     squares: 225, //it will display the closest 'perfect square' number of tiles 
     transition: 'linear' 
    }, $(this).data()); 

我想這與上下文有關。任何人都可以幫助我解決並理解如何使用setTimeoff?

修復裝置我能夠setTimeout的W/O在瀏覽器中FF,IE和鉻,而每個實例的slide_config.squares值等於任一個由每個幻燈片對象設置或默認值(即slide_default)錯誤

注意:在第一個代碼示例中,slide_config.squares的值是我的預期值,即根據幻燈片對象或slide_config默認設置。再次,該代碼會出現很好地工作在谷歌Chrome中的代碼第一位

回答

1

你需要通過編寫

var slide_config = ...; 

申報slide_config作爲each()回調中的局部變量這會給每個setTimeout關閉了自己的變量的副本,而不是讓它們共享一個全局變量。

+0

@SLarks我雖然我這樣做。 $ slides.each(function(i){this每個對應於每張幻燈片,然後設置slide_config = $ .extend({...我是否錯過了一些東西?您可以查看完整的來源http://websonalized.com/myplugin.js – IberoMedia

+0

@SLarks ... je je je是的,我有些遺憾。在設置slide_config之前,'var'這個詞謝謝 – IberoMedia