javascript - 使用 break on click 停止循环
问题描述
我有这个从 1 到 20 的简单循环。我想要做的是使用按钮单击来停止循环。我所做的是,我设置了一个条件,即单击按钮时变量的值stop
将更改为 1,这将触发break
. 但是值没有改变。
var stop = 0;
for(let i = 1; i <= 20; i++){
if(stop === 1){
break;
}
setTimeout(function(){
$('ul').append('<li>'+ i +'</li>');
},i * 500);
}
$('button').click(function(){
stop = 1;
});
ul li{
list-style-type: none;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul></ul>
<br>
<button>stop</button>
解决方案
这 20 个setTimeout
函数在你按下停止之前就被调用了。
解决此问题的许多方法之一是检查stop
函数内部的变量setTimeout
正在执行。
var stop = 0;
for (let i = 1; i <= 20; i++){
setTimeout(function(){
console.log(stop);
if (stop !== 1) {
$('ul').append('<li>'+ i +'</li>');
}
},i * 500);
}
$('button').click(function(){
stop = 1;
});
ul li{
list-style-type: none;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul></ul>
<br>
<button>stop</button>
编辑:
你问如何停止for
循环。它的写法你不能。
这就是我将如何实现它以便用setTimeout
.
您也可以使用setInterval
(查看Сергей Петрашко's answer以了解如何)。在此处
阅读它们之间的差异):
var stop = false;
function addNumberAndCallNext(number, max) {
if (!stop && number <= max) {
$('ul').append('<li>'+ number +'</li>');
setTimeout(addNumberAndCallNext.bind(null, ++number, max), 500);
}
}
addNumberAndCallNext(1, 20);
$('button').click(function(){
stop = true;
});
ul li {
list-style-type: none;
float: left;
padding-right: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul></ul>
<br>
<button>stop</button>
推荐阅读
- sql - 如何在单个 SQL 查询中为每个字段选择第 k 条记录
- javascript - 尝试根据使用 Javascript 的 URL 中的内容重定向页面
- applescript - Applescript 以 Safari 私人模式打开 youtube
- typescript - ionic 4 - 背景地理位置问题
- r - 由于路径中的重音,在 R 中使用 readJPEG 打开 .jpg 时出错
- c++ - 从 QUdpSocket 发送的数据包在 Wireshark 中看不到
- c++ - Travis CI 从源日志限制错误安装提升
- php - 如何使用 WP REST API 随机排序帖子?
- sql - 从多个表格中选择特定单元格
- java - 如何使 GUI 上的多个按钮工作