javascript - 用户如何用按钮打破 JS 循环
问题描述
用户如何通过单击按钮来停止循环
这是我在循环中需要做的事情:
HTML:
<input type="button" id="stop" value="Stop" />
<input type="button" id="go" value="Go" />
<div id="div"> </div>
Javascript:
document.getElementById('go').addEventListener('click', function(){
// request to server that return a list of object.
// for each returned objet, I do another request to the server. like that
for(let i=0; i < objets.length; i++){
// request to the server.
// update the div for progress bar like 1%..2%
}
});
document.getElementById('stop').addEventListener('click', function(){
// how to break the loop made by go button
});
解决方案
如果您正在运行一个简单的for (..)
循环,则无法通过外部影响来停止。一切都发生在 Javascript 的同一个线程上,除非您的代码在某个时刻“结束”并将控制权返回给浏览器一段时间,否则不会发生 UI 交互。拥有“循环”的最简单方法是通过 a setTimeout
or setInterval
:
interval = null;
startBTN.onclick = function () {
var i = 0;
interval = setInterval(function () {
console.log(i++); // this is inside your loop
}, 1);
};
stopBTN.onclick = function () {
clearInterval(interval);
};
推荐阅读
- generics - Kotlin T 值不能用返回任何函数的函数赋值
- java - 为什么 Integer.parseInt 方法不适用于拆分字符串?
- kubernetes - 为 GCP 上的负载平衡器应用注释以获取 GKE 上的源 IP 防火墙规则
- python - 处理大功率python 3
- angularjs - AngularJS Intellisense 无法在 Visual Studio 2019 中运行?
- javascript - REDUX:通过 this.props 访问的存储变量已过时,但 store.getState() 有效
- angular - 获取Form Array中的第0个元素FormControl,angular8
- c# - XML反序列化在c#中返回0结果
- reactjs - 使用 useContext 和 useReducer 进行状态管理并使用 useEffect 获取数据
- java - 遍历 Java 2D 数组中的列是否与行一样有效?