1

いくつかの div 要素の間にスライドショーを作成するための最初の 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);
    });
});

しかし、私はいつもこのエラーを受け取り、問題がどこにあるのかわかりません。

Undefined はオブジェクトではありません (this.slides[this.numberActiveSlide] を評価します)。

ありがとうございます !

ニック

4

1 に答える 1

0

コンテキストの問題であることは 99% 確実です。コード全体で保持されるように、関数呼び出しをバインドしてください。this

にあるものをデバッグthisswitch_slidesます。これは にあるものと同じでなければなりませthisstart_slideshowswitch_slidesそうでない場合は、呼び出しをインスタンスにバインドします。

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

おそらく、switch_slidesそれ自体を呼び出す場所で同じことを行う必要があります。

于 2013-02-27T02:13:58.060 に答える