2011-07-22 4 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回

xTcountは、別のスクリプトに基づいて変更されます(ユーザーは数値を含む一連のdivをクリックします。値はintに解析されて保存されますが、簡単にするため、この質問では3にします)。

doublerとfloatRは関数の名前です。私は、関数の名前を取得するためにケースソリューションを使用し、ループ関数に渡すことを望んでいた。

私はif節を持っているので、ユーザーは効果を出すために必ず「1」をクリックする必要はありません。 (基本機能での世話をされている。)が1より大きいだのであれば、この方法は、それだけでループして、一度だけelsewiseより明示的な流れを説明するために、コードを修正

EDIT

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

私の機能が呼び出されていないようです。ダブリング関数にappend(text)を追加しました。関数を直接呼び出すと、関数が呼び出され、追加されたテキストがシグナルとして出力されます。しかし、このループ機能によって、テキストは決して表示されません。だから私は関数が呼び出されていないと推測します。

答えて

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 
+0

で、ここで同等のモックアップを参照してください。帽子が欲しい。私が知っていることは、私の機能が呼び出されていないということです。私はそれをより明示的に書き直しましたが、それでも動作しません。 OPを参照してください。 –

関連する問題