jQuery 取消选中复选框后函数循环不停止

jQuery function loop don't stop after checkbox unchecked

我有一个复选框,它启动一个名为 "next" 的函数循环。到目前为止,这项工作是正确的。未选中的框应该停止函数循环。那是行不通的。我在 Whosebug-forum 上发现,有必要在 if-else-statement 之外声明一个 Interval-ID 的变量。没有成功。有任何想法吗? 这是代码:

 $('input[type="checkbox"]').click(function(){
      var intervalID = 0; 
      if($(this).is(":checked")){
          var intervalID = setInterval(next, 400);         
         }
           else if($(this).is(":not(:checked)")){
           clearInterval(intervalID);
        }
      }
  );

此致

"I found in the Whosebug-forum, that it is necessary to declare a variable of the Interval-ID outside the if-else-statement"

范围远不止于此。在您的情况下,当您在函数内部初始化一个变量时,它仅在该函数内部可用。我强烈建议阅读范围,那里有很多不需要在这里重复的有用信息。例如:http://www.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/

您确实需要 运行 通过您的代码才能了解发生了什么。看看代码,想一想。每次单击复选框时,您都会将 intervalID 设置为 0。因此,clearInterval 函数不起作用也就不足为奇了。

您需要将该变量 存储在整个点击函数的 之外,以便下次触发事件时可以访问它。此外,else 就足够了。只有两种可能的选择;如果第一次检查 returns false 那么你知道它没有被检查 - 你不需要测试它。

var intervalID = 0;
$('input[type="checkbox"]').click(function(){
  if ( $(this).is(":checked") ) {
    intervalID = setInterval( next, 400 );         
  }
  else {
    clearInterval( intervalID );
  }
});