1. ホーム
  2. javascript

[解決済み] setInterval()の内部でclearInterval()を呼び出すことはできますか?

2022-04-21 18:44:29

質問

bigloop=setInterval(function () {
              var checked = $('#status_table tr [id^="monitor_"]:checked');
                if (checked.index()===-1 ||checked.length===0 || ){
                    bigloop=clearInterval(bigloop);
                    $('#monitor').button('enable');
                }else{

                        (function loop(i) {                           
                            //monitor element at index i
                            monitoring($(checked[i]).parents('tr'));
                            //delay of 3 seconds
                            setTimeout(function () {
                                //when incremented i is less than the number of rows, call loop for next index
                                if (++i < checked.length) loop(i);
                            }, 3000);
                        }(0)); //start with 0
                }                            
            }, index*3000); //loop period

私は上記のコードを持っており、時々それは動作しているときとそうでないときがあります。私は疑問に思っています。 clearIntervalは実際にタイマーをクリアしているのでしょうか? というのも、この monitor にあるときだけ無効になるボタンです。 monitoring 関数を使用します。私は別の clearInterval という要素がある場合 .outputRemove がクリックされる。以下のコードをご覧ください。

//remove row entry in the table      
        $('#status_table').on('click', '.outputRemove', function () {
            deleted= true;
            bigloop= window.clearInterval(bigloop);
            var thistr=$(this).closest('tr');
            thistr.remove();
            $('#monitor').button('enable');

            $('#status_table tbody tr').find('td:first').text(function(index){
               return ++index;

            });
        });

しかし、しばらく有効になっていたのに、また無効になる。 ウィル clearInterval からプログラムを取り出す。 setInterval 関数は?

どのように解決するのですか?

はい、できます。テストもできます。

var i = 0;
var timer = setInterval(function() {
  console.log(++i);
  if (i === 5) clearInterval(timer);
  console.log('post-interval'); //this will still run after clearing
}, 200);

この例では、このタイマーは、以下の場合にクリアされます。 i が 5 になった。