2011-07-22 45 views
2
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我不想追加它,因为它现在已经很老了,而且我不确定是否推荐了它。重复函数X次

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

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

我有if子句,以便用户不必总是点击“1”才能实现效果。因此,这种方式只有当它大于1,并且只有一次elsewise(这是在基本功能的照顾。)

编辑

修改后的代码,展示一个更明确的流程循环。

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

看来,我的功能不会被调用。我在我的Doubling函数中添加了一个附加(文本),如果我直接调用该函数,它会起作用,并将附加文本作为它触发的信号。但是通过这个循环函数,文本从不出现。所以我推断这个函数没有被调用。

回答

2

从函数名称中删除引号,它应该工作:

var target = $this.hasClass('Double_It') ? doubler 
      : $this.hasClass('Float_R') ? floatR 
      : 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 
+0

我不知道,如果你的小提琴是媲美为w我想要的帽子。我所知道的是我的功能没有被调用。我将其重写为更明确,但仍然无效。见OP。 –