#JavaScript If语句不适用于setInterval

时间:2018-05-27 01:31:51

标签: javascript if-statement setinterval

这是我的代码

$('.match-dates').on('afterChange', function () {

        var currentSelectionDate =  $('.match-dates .slick-current > div > div').attr('data-date');
        var liveStatus;

        if(currentSelectionDate == null){
            liveStatus = 1;
            $.get('/api/index.php?request=GetLiveMatchesSpecial', function ( data ) {
                $('.lives').html(data);
            });

        } else {
            liveStatus = 0;
            $.get('/api/index.php?request=GetFixturesSpecial&date=' + currentSelectionDate, function ( data ) {
                $('.lives').html(data);
            });
        }

        if(liveStatus === 1){
            console.log(liveStatus);

            setInterval(function () {
                $.get('/api/index.php?request=GetLiveMatchesSpecial', function ( data ) {
                    $('.lives').html(data);
                });
            }, 5000);
        } else {
            console.log(liveStatus);

            clearInterval();

        }

    });

当var liveStatus = 0时,它仍然加载setInterval函数。 如您所见,我正在检查var liveStatus的值,它运行良好。 为什么我无法卸载以前加载的setInterval函数?

由于

2 个答案:

答案 0 :(得分:1)

要使clearInterval生效,您必须将之前要清除的setInterval来电的结果传递给它。没有传递参数的clearInterval()将不执行任何操作。例如:

let interval;
$('.match-dates').on('afterChange', function() {
  var currentSelectionDate = $('.match-dates .slick-current > div > div').attr('data-date');
  var liveStatus;
  if (currentSelectionDate == null) {
    liveStatus = 1;
    $.get('/api/index.php?request=GetLiveMatchesSpecial', function(data) {
      $('.lives').html(data);
    });
  } else {
    liveStatus = 0;
    $.get('/api/index.php?request=GetFixturesSpecial&date=' + currentSelectionDate, function(data) {
      $('.lives').html(data);
    });
  }
  if (liveStatus === 1) {
    console.log(liveStatus);
    interval = setInterval(function() {
      $.get('/api/index.php?request=GetLiveMatchesSpecial', function(data) {
        $('.lives').html(data);
      });
    }, 5000);
  } else {
    console.log(liveStatus);
    clearInterval(interval);
  }
});

答案 1 :(得分:0)

setInterval()方法重复调用函数或执行代码段,每次调用之间有固定的时间延迟。

所以每隔5000ms编写一次setInterval代码就会被调用。

因此如果$('.match-dates').on('afterChange', function () liveStatus0作为setInterval()触发一次就足够了,那么您的setTimeout函数将每5秒调用一次。

可能应该尝试使用setTimeout()

setTimeout(function() { $.get('/api/index.php?request=GetLiveMatchesSpecial', function(data) { $('.lives').html(data); }); }, 5000); 方法设置一个计时器,在计时器到期后执行一次函数或指定的代码。

{{1}}