Jquery: как передать в .next или .prev в качестве переменной функции? - PullRequest
1 голос
/ 09 июля 2011

В моем коде ниже я хочу иметь возможность перейти в предыдущий или следующий. Я просто хочу знать, как сделать pn переменной в моей функции (я пробовал ниже, но это неправильно), поэтому я могу сделать это:

doSlide($('UL li:last'), 0, next)

или

doSlide($('UL li:last'), 15, prev)

функция:

function doSlide(current, px, pn) {
    $(current).animate({
        right: px
    },200);
    setTimeout(function(){
            doSlide($(current)."+ pn +"('li'), px);           
    },45);
}

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Я бы отправил функции в виде строк:

doSlide($('UL li:last'), 15, "next")

или

doSlide($('UL li:last'), 15, "prev")

И функция будет:

function doSlide(current, px, pn) {
    $(current).animate({
        right: px
    },200);
    setTimeout(function(){
            doSlide($(current)[pn]('li'), px);           
    },45);
}

Попробуй. Это работает.

Надеюсь, это поможет. Приветствия

1 голос
/ 09 июля 2011

В дополнение к вашему коду и ответу @Edgar Villegas Alvarado, проблема в том, что вы никогда не проверяете, есть ли что-либо, возвращенное .next() или .prev(), поэтому ваша рекурсия никогда не закончится, она будет запускать вашу функцию на пустом jQuery объекты каждые 45 мс.

Используйте это:

function doSlide(current, px, pn) {
    $(current).animate({
        right: px
    },200);

    var $next = $(current)[pn]('li');
    if($next.length){
        setTimeout(function(){
            doSlide($next, px);           
        },45);
    }
}

doSlide($('ul li:first'), 15, "next");

// or

doSlide($('ul li:last'), 15, "prev");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...