2016-11-24 15 views
0

javascriptに複数の変数があります(たとえば、aValue、bValue、cValueなど)。これらの変数はすべて最初は0に設定されています。今度はカスタムロジックごとにこれらの値を変更する複数の関数/イベントがあります。これらの3つの変数の値がすべて1になると、DOMを変更できる新しいイベントがトリガーされます。複数の変数の状態に基づくJavascript/Jqueryカスタムイベント

var aValue = 0; 
var bValue = 0; 
var cValue = 0; 

// On doing something functionA is called 
functionA() { 
    aValue = 1; 
} 

//On triggering some event function is called 
$(selector).on(event, function() { 
    bValue = 1; 
}); 

//On doing something functionC is called 
functionC() { 
cValue = 1; 
} 

これらの関数がすべて呼び出されたとき(つまり、すべての変数を1に変更する)イベントをトリガーする必要があります。このイベントを使用することで、DOMを変更したいと考えています。

$(selector).on(// when aValue == 1 && bValue == 1 && cValue == 1, function(){ 
    // do something 
}); 

よう

何かがそれを行う方法はあります。

+1

値の変更後に呼び出される3つの関数すべてに共通の関数があり、すべての値が変更された場合は、次の操作を実行します。 – Rayon

答えて

2

はい、あなたは値

var aValue = 0; 
var bValue = 0; 
var cValue = 0; 

function testAll() { 
    if(aValue == 1 && bValue == 1 && cValue == 1){ 
    alert('triggered all'); 
    }; 
} 

// On doing something functionA is called 
functionA() { 
    aValue = 1; 
    testAll(); 
} 

//On triggering some event function is called 
$(selector).on(event, function() { 
    bValue = 1; 
    testAll(); 
}); 

//On doing something functionC is called 
functionC() { 
    cValue = 1; 
    testAll(); 
} 
+2

'aValue == bValue == cValue == 1'は、あなたが思っていることをしません。' 0 == 0 == 1'は実際に 'true'なので、これは動作しません。 – nnnnnn

+1

常に好む___ '===' ___ over '==' – Rayon

1

のいずれかを変更するたびに、このソリューションは、もう少し複雑である別の関数を作成し、それに

functionA() { 
    aValue = 1; 
    checkValue(); 
} 

//On triggering some event function is called 
$(selector).on(event, function() { 
    bValue = 1; 
    checkValue(); 
}); 

//On doing something functionC is called 
functionC() { 
cValue = 1; 
checkValue(); 
} 


function checkValue(){ 
    if(aValue == 1 && bValue == 1 && cValue == 1){ 
     // do your stuff 
    } 
} 
1

が値を確認し、それを呼び出し、関数を使用しますあなたにもっと多くの自由を与えるでしょう。これらの値を変更する複数の関数/イベントがあるとしましょう。他のソリューションでは、多くの場所から別の関数を呼び出す必要があります。あなたはProxy

プロキシオブジェクトを使用することを検討すべきである

は、基本 操作(例えば不動産検索、割り当て、列挙、機能 呼び出しなど)のカスタム動作を定義するために使用されます。

あなたは、単一のオブジェクトを持っていて、プロパティとして必要なすべての変数を追加し、あなたが今get()が作っている

var handler = { 
    get: function(target, name){ 
     return name in target? 
      target[name] : 0; 
    }, 
    set: function(target, name, value){ 
     var firstTime = !(name in target); 
     target[name] = value; 
     if (firstTime) return value; 
     for (var key in target) { 
      if (target.hasOwnProperty(key) && target[key] !== 1) { 
      return value; 
      } 
     } 
     alterDOM(); 
    } 
}; 

function alterDOM(){ 
    // do your stuff 
    console.log('All properties are = 1!'); 
}; 

var values = new Proxy({}, handler); 

値にProxyを使用して変更をリッスンするset()get()機能を追加することができますあなたのオブジェクトのすべてのプロパティはデフォルトで= 0ですので、console.log(values.a, values.b, values.c);を入力すると、0 0 0

set()はプロパティに値を設定していますが、すべてのプロパティが= 1であるかどうかを確認しています。もしそうなら、ロジックを追加できる場所であるalterDOM()関数を起動します。あなたは

values.a = 1; 
values.b = 1; 
values.c = 1; 

をすれば

だからalterDOM()

を解雇され、これは、追加のプロパティの数とは無関係であるので、あなたは3を持っている場合、それは同じように動作しますが、5か注意してくださいコードを変更することなく、100の変数を扱うことができます。

関連する問題