как я могу заставить этот код работать? - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть код ниже, но я не могу вызвать nextPromo, потому что это не функция.Как я могу сделать эту работу?Я пытаюсь настроить ротатор, используя объектно-ориентированный стиль.Я новичок в этом, поэтому я очень смущен.Я пробовал много вещей, но я просто не знаю, и я очень расстроен, пожалуйста, помогите

function promoSlides(s){
    this.index = 0;
    this.prevIndex = 0;
    this.currentVeh = "";
    this.t;
    this.slides = s;
    this.len = this.slides.length;
    this.sortWeight = function(){
        ($('body').hasClass('en')) ? this.slides.sort(SortByWeight) : this.slides.sort(SortByWeightFr);
    };

    function SortByWeight(a,b) { return b.weight - a.weight; }
    function SortByWeightFr(a,b) { return a.frWeight - b.frWeight; }

    this.startTimer = function(){ this.t = setTimeout("this.nextPromo()", 3000); }

    this.nextPromo = function(){
       if(this.index > 0 || this.prevIndex > 0) $(this.slides[this.prevIndex].el).css("display","none");
       $(this.slides[this.index].el).css("display","block");
       this.prevIndex = this.index;
       this.index = (this.index < this.len-1) ? this.index+1 : 0;
       this.startTimer();
    }

    return true;
} ;

Ответы [ 3 ]

1 голос
/ 23 ноября 2011

На самом деле, nextPromo - это функция. Вы можете назвать это как:

this.nextPromo();

Или, если это не сработает, вы можете просто вызвать его как обычную функцию:

nextPromo();

См. this jsFiddle для примера такого рода функции.

Надеюсь, это поможет.

0 голосов
/ 23 ноября 2011

РЕДАКТИРОВАТЬ: Вот упрощенный пример, который я протестировал.Это использует setInterval, чтобы периодически продвигать индекс слайда.«Следующая» функциональность содержится в анонимной функции.

function promoSlides(s) {

    this.startTimer = function () {

        setInterval(
        function () {
            alert("called");

            //                if (this.index > 0 || this.prevIndex > 0) {
            //                    $(this.slides[this.prevIndex].el).css("display", "none");
            //                }

            //                $(this.slides[this.index].el).css("display", "block");
            //                this.prevIndex = this.index;
            //                this.index = (this.index < this.len - 1) ? this.index + 1 : 0;
        }, 3000


        );
    }

    return true;
};

var p = new promoSlides(null);
p.startTimer();
0 голосов
/ 23 ноября 2011

Вы назначаете функцию для this.nextPromo, поэтому вызов this.nextPromo(); должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...