Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用单击事件jQuery停止循环_Javascript_Jquery_Loops_Each - Fatal编程技术网

Javascript 使用单击事件jQuery停止循环

Javascript 使用单击事件jQuery停止循环,javascript,jquery,loops,each,Javascript,Jquery,Loops,Each,我正在寻找一种通过点击事件(类似于紧急按钮)停止循环的方法。如果你点击按钮,它应该立即停止 //基本思想 $.each(someArray, function(index, value){ setTimeout(function(){ console.log(index); },5000*index); }); $('#panic-button').click(function(){ //the code that should stop the

我正在寻找一种通过点击事件(类似于紧急按钮)停止循环的方法。如果你点击按钮,它应该立即停止

//基本思想

$.each(someArray, function(index, value){
    setTimeout(function(){
          console.log(index);
     },5000*index);
});


$('#panic-button').click(function(){
    //the code that should stop the looping
}):

你的答案很简单:

setTimeout
前面添加
var$theTimeout=
并在
中单击
处理程序将其清除:
clearTimeout($theTimeout)


你的答案很简单:

setTimeout
前面添加
var$theTimeout=
并在
中单击
处理程序将其清除:
clearTimeout($theTimeout)


在$.each()之外创建函数返回值,并使用标志变量确定是否单击了按钮。我通常使用“窗口”声明全局函数和变量


我在编辑中加入了乔纳森·洛诺夫斯基给出的for循环。这个想法与此类似,只是需要一个额外的变量来阻止初始循环的执行。这是否解决了您的问题?

在$.each()之外创建函数返回值,并使用标志变量确定是否单击了按钮。我通常使用“窗口”声明全局函数和变量


我在编辑中加入了乔纳森·洛诺夫斯基给出的for循环。这个想法与此类似,只是需要一个额外的变量来阻止初始循环的执行。这能解决您的问题吗?

您不能中断
$。循环启动后,每个
循环都会使用
单击
处理程序。JavaScript执行是单线程的,因此,
单击
处理程序充其量只能排队等待下一次线程空闲时——循环完成后

但是,由于计时器是异步执行的,您可以通过保留和清除它们的每个ID来取消它们:

var timeouts = [];

$.each(someArray, function(index, value){
    timeouts.push(setTimeout(function(){
          console.log(index);
     },5000*index));
});


$('#panic-button').click(function(){
    $.each(timeouts, function (_, id) {
       clearTimeout(id);
    });

    timeouts = [];
}):

您不能中断
$。循环启动后,每个
循环都有一个
单击
处理程序。JavaScript执行是单线程的,因此,
单击
处理程序充其量只能排队等待下一次线程空闲时——循环完成后

但是,由于计时器是异步执行的,您可以通过保留和清除它们的每个ID来取消它们:

var timeouts = [];

$.each(someArray, function(index, value){
    timeouts.push(setTimeout(function(){
          console.log(index);
     },5000*index));
});


$('#panic-button').click(function(){
    $.each(timeouts, function (_, id) {
       clearTimeout(id);
    });

    timeouts = [];
}):

如果你想在后台有一个循环
,你可以终止它,你必须模拟它,因为js基本上是单线程的,你的循环将被阻塞,直到它完成,然后你可以点击一个按钮

下面是一个例子,它使用settimeout来模拟一个可以通过单击取消的循环


如果你想在后台有一个循环
,你可以终止它,你必须模拟它,因为js基本上是单线程的,你的循环将阻塞,直到它完成,然后你可以点击一个按钮

下面是一个例子,它使用settimeout来模拟一个可以通过单击取消的循环


这是行不通的,因为它位于一个
结构中,所以创建了多个计时器。您需要将它们保存在一个数组中,并清除所有无法工作的计时器上的超时,因为它位于
每个
构造中,所以创建了多个计时器。您需要将它们保存在一个数组中,并清除所有它们上的超时