重复功能X次

时间:2011-07-22 13:31:51

标签: jquery function loops

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);}
});

我正在尝试创建一个循环另一个函数的函数。它循环的功能有所不同,我需要一个通用的函数循环函数。我通过这个问题得到了帮助:Iterate a script X times我不想追加它,因为它现在已经过时了,我不确定是否推荐它。

xTcount确实根据另一个脚本(用户单击包含数字的一系列div)进行更改,该值被解析为int并存储,但为了简单起见,我将在此问题中将其保留为3。)

doubler和floatR是函数的名称。我希望使用案例解决方案来获取函数名称,并将其传递给循环函数。

我有if子句,因此用户不必总是单击“1”以便发生效果。所以这种方式只有在大于1的情况下才会循环,并且只在其他方面循环(在基本函数中处理。)

修改

修改代码,以演示更明确的流程。

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

看来我的函数没有被调用。我在我的Doubling函数中添加了一个追加(文本),如果我直接调用该函数,它可以工作,我得到附加的文本作为它触发的信号。但是通过这个循环函数,文本永远不会显示出来。所以我推断该函数没有被调用。

1 个答案:

答案 0 :(得分:2)

从函数名中删除引号,它应该有效:

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

当然,如果你得到null,那么你的代码就会破坏,所以你可能想要检查它:

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

this 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
相关问题