【问题标题】:Repeat Function X times重复函数 X 次
【发布时间】:2011-07-22 13:31:51
【问题描述】:
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);
});

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

【问题讨论】:

    标签: jquery function loops


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我不确定你的小提琴是否能与我想要的相媲美。我所知道的是我的函数没有被调用。我重写了它以更明确,但仍然不起作用。见 OP。
    猜你喜欢
    • 2015-05-07
    • 2017-10-28
    • 2017-03-30
    • 2012-12-23
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多