Повторите функцию X раз - PullRequest
2 голосов
/ 22 июля 2011
var xTcount = 3;

jQuery.fn.repeatFx = function(fn, times) {
    for(var i = 0; i < times; i++) fn();
}

$("#Art_C_M li").live('click', function() {
    var $this = $(this);
    var target = $this.hasClass('Double_It') ? 'doubler'
               : $this.hasClass('Float_R') ? 'floatR'
               : null;

    if (xTcount > 1) {repeatFx(target, xTcount);}
});

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

xTcount изменяется, основываясь на другом скрипте (пользователь щелкает серию div, которые содержат числа, значение разбирается в int и сохраняется, но для простоты я оставлю это как 3 в этом вопросе.)

doubler и floatR - имена функций. Я надеялся использовать решение для случая, чтобы получить имена функций и передать их функции цикла.

У меня есть предложение if, чтобы пользователям не всегда приходилось нажимать «1», чтобы эффект был. Таким образом, этот цикл выполняется только в том случае, если он больше 1, и только один раз в другом случае (что рассматривается в базовых функциях.)

EDIT

Модифицированный код для демонстрации более явного потока.

$(".Double_It").live('click', function() {
    repeatFx(drawCard, xTcount);
});

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

1 Ответ

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

Удалите кавычки из имен ваших функций, и оно должно работать:

var target = $this.hasClass('Double_It') ? doubler
           : $this.hasClass('Float_R') ? floatR
           : null;

Конечно, если вы получите нулевое значение, ваш код сломается, поэтому вы можете проверить его:

if ((xTcount > 1) && (target !== null) {.....

Смотрите эквивалентный макет здесь этот JSFiddle

function a() { alert("a"); }    
function b() { alert("b"); }    
function c(f){ f();}
var x = 1;  //change to '0' to see other function call
var fn = (x===0) ?  a : b;
c(fn);  //the alert will depend on whether a or b is assigned to fn
...