2016-11-04 5 views
1

動的パラメータをsetInterval関数(質問hereを参照)に渡したいと思い、具体的には@ tvanfossonのコメントを渡したかったのです。 しかし、特定の条件が満たされている場合は、そのタイマーを無効にします。私はグローバル変数としてタイマ変数を定義しようとしましたが、私はまだこのライン上のundefinedとしてタイマーを取得:
console.log('else. timer=' + timer);動的パラメータでsetInterval関数内のタイマを無効にする

。タイマー=未定義

<script language="javascript" type="text/javascript"> 
    var timer; 
    var params={}; 
    params.color='light'; 
    $(document).ready(function() {    
     timer=createInterval(showSmallWidget, params.color, 500); 
    }); 

    function createInterval(f, dynamicParameter, interval) { 
     setInterval(function() { 
      f(dynamicParameter); 
     }, interval); 
    } 

    function showSmallWidget(color) { 
     if ($('#widget').html() == '') { 
      //do stuff 
     } 
     else { 
      console.log('else. timer=' + timer); 
      if (timer) { console.log('CLEAR TIMER'); timer.clearInterval(); timer = null; } 
     } 
    } 
</script> 

私はJSFiddleを作成しようとしましたが、私はそれが正常に動作させることはできません。https://jsfiddle.net/puhw3z2k/

答えて

3

夫婦の問題があります。

1)あなたがする必要があります

function createInterval(f, dynamicParameter, interval) { 
    return setInterval(function() { 
     f(dynamicParameter); 
    }, interval); 
} 

2)clearInterval()作品:あなたのcreateInterval()関数からtimerIdのを返しますこのようなclearInterval(timer)ではなく、timer.clearInterval()です。

関連する問題