2013-02-24 70 views
1

我寫我的第一Scriptaculous的腳本來創建一些div元素之間的幻燈片:幻燈片使用Prototype和Scriptaculous

var SlideShow = Class.create({ 
    initialize:function(element, delayStart){ 
     this.element = element; 
     this.delayStart = delayStart; 


     this.slides = this.element.childElements(); 

     this.numberOfSlides = this.slides.size(); 

     this.numberActiveSlide = 1; 

     this.start_slideshow(); 
    }, 

    start_slideshow: function() 
    { 
     this.switch_slides.delay(this.delayStart); 
    }, 

    switch_slides: function() 
    { 
     this.slides[this.numberActiveSlide].fade(); 

     if (this.numberActiveSlide == this.numberOfSlides) { this.numberActiveSlide = 1; } else { this.numberActiveSlide = this.numberActiveSlide + 1; } 

     Effect.Appear.delay(this.slides[this.numberActiveSlide], 850); 

     this.switch_slides.delay(this.delay + 850); 
    } 


}); 

document.observe("dom:loaded", function(){ 
var slideshows = $$('div.slideshow'); 
slideshows.each(
    function(slideshow) { 
     s = new SlideShow(slideshow, 2); 
    }); 
}); 

但我總是得到這個錯誤,它一直小時,我想不出它在哪裏我的問題是!

未定義不是一個對象(評估this.slides [this.numberActiveSlide]);

謝謝你!

尼克

+0

該錯誤引用該對象的對象實例和「幻燈片」屬性。幻燈片屬性正在尋找所有的子元素,並且可能沒有 - 您是否可以編輯您的問題併發布您的HTML? – 2013-02-26 17:47:12

回答

0

99%肯定這是一個上下文問題。確保你的函數調用bind,以便this保留在你的代碼中。

調試什麼thisswitch_slides:它應該與thisstart_slideshow中一樣。如果不是的話,你要switch_slides電話綁定到您的實例:

start_slideshow: function() 
{ 
    this.switch_slides.bind(this).delay(this.delayStart); 
}, 

你可能必須做相同的switch_slides它調用自身。