2017-08-24 12 views
-1

私は独立した機能のセットを持っています - fn1()fn2()fn3()fn4()です。ボタンのクリックで順次複数の機能を切り替えます

バックfn1()

へ[クリック] [クリック] fn4() fn3() [クリック] fn2() [CLICK]私は一度に実行されている一つの機能を必要とするが、機能がシーケンス fn1()で、単一のボタンのクリックで、切り替える必要があります

どのようにこの問題にアプローチしますか?あなたはmyclick呼び出す

+0

それはあなたが求めているものを実際に明確ではありません。要素を連続してクリックするたびに異なる関数を実行する必要がありますか? –

+0

@RoryMcCrossan正確に –

+0

私はあなたのために答えを追加 –

答えて

2
function fn1(){} 
function fn2(){} 
function fn3(){} 

var i = 1; 

function myclick(){ 
    if (i == 1) 
     fn1(); 
    elseif (i == 2) 
     fn2(); 
    elseif (i == 3) { 
     fn3(); 
     i = 1; 
    } 

    i++; 
} 

毎回、それは1つのFNを実行し、私に1を加算します。次回は2番目のfnを実行し、次に3番目のfnを実行します。

+1

パーフェクト。ありがとうございましたJackson Ng –

+1

4回目のクリックはfn1()ではなくfn2() – natchkebiailia

+1

@natchkebiailiaで解決されました。私の値は最後のelseコールで0になるはずです –

5

あなたがしようとしていることを理解していれば、1つの要素の連続したクリックに対して別の機能を実行する必要があります。あなたが最後に到達すると、配列の先頭に戻るには、剰余演算子を使用して、各1を通じて実行し、配列内の各機能を置くことができることを行うには

、このような何か:

var functions = [function() { 
 
    console.log('first'); 
 
}, function() { 
 
    console.log('second'); 
 
}, function() { 
 
    console.log('third'); 
 
}, function() { 
 
    console.log('fourth'); 
 
}]; 
 

 
$('button').click(function() { 
 
    var i = ($(this).data('i') + 1) || 0; 
 
    functions[i % functions.length](); 
 
    $(this).data('i', i); 
 
}); 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button>Click me</button>

3

クロージャを使用して、実行する機能を追跡することができます。

HTML:

<button type="button" onclick="foo()"></button> 

のJs:

var foo = (function() { 
    var funcIndex = 0; 
    return function() { 
     switch(funcIndex) { 
      case 0: func1(); break; 
      case 1: func2(); break; 
      case 2: func3(); break; 
      case 3: func4(); break; 
     } 

     funcIndex = (funcIndex+1) % 4; 
    } 
})(); 
1

あなたがこの方法を試すことができます。

function fn1() 
{ 
    //do something 
    $("#myButton").off("click"); 
    $("#myButton").click(fn2); 
} 

function fn2() 
{ 
    //do something 
    $("#myButton").off("click"); 
    $("#myButton").click(fn3); 
} 

function fn3() 
{ 
    //do something 
    $("#myButton").off("click"); 
    $("#myButton").click(fn4); 
} 

function fn4() 
{ 
    //do something 
    $("#myButton").off("click"); 
    $("#myButton").click(fn1); 
} 

$("#myButton").click(fn1); 
+2

ちょうど、次のクリックごとに新しいイベントハンドラを追加しています。 4回目のクリックで、4つのイベントハンドラがすべて実行されます –

+0

@RoryMcCrossanあなたは正しいです、私はその問題を昨日持っていました、私はそれについて私の投稿を編集します – Cid

2
arr=[fn1,fn2,fn3,fn4]; 
var i=0; 
$("buttonId").click(function(){ 
    arr[i%4](); 
    i++; 
}) 
2
<button onclick="toogle()">Click Me</button> 

その後

var index = 0; 
var funcArr= [f1,f2,f3,f4]; 
function toogle(){ 
    funcArr[index](); 
    index++; 
    index = index%funcArr.length; 
} 

function f1(){console.log("f1")}; 
function f2(){console.log("f2")}; 
function f3(){console.log("f3")}; 
function f4(){console.log("f4")}; 

https://jsfiddle.net/8chvusaq/

関連する問題