Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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 复选框导致无限循环_Javascript_Html_Loops_Checkbox - Fatal编程技术网

Javascript 复选框导致无限循环

Javascript 复选框导致无限循环,javascript,html,loops,checkbox,Javascript,Html,Loops,Checkbox,因此,我正在使用html en Javascript制作一个程序,用户可以单击一个按钮,程序将执行一个计算,选中复选框时,将在循环中执行相同的计算 <body> <button onclick="javascript:calc();"> Calculate</button> <form action=""> <input id="checkbox" type='checkbox' name='auto' value='Aut

因此,我正在使用html en Javascript制作一个程序,用户可以单击一个按钮,程序将执行一个计算,选中复选框时,将在循环中执行相同的计算

  <body>
  <button onclick="javascript:calc();"> Calculate</button>
  <form action="">
   <input id="checkbox" type='checkbox' name='auto' value='Auto' /> 
  </form>

   <script>
    var checkbox = document.getElementById('checkbox');
   function calc() {
     do{
    //Calculate stuff
     }while(checkbox.checked);
    }
   </script>

   </body>

算计
var checkbox=document.getElementById('checkbox');
函数计算(){
做{
//算计
}while(checkbox.checked);
}
问题是,当我选中复选框时,网页只是冻结,因为它被卡在一个无限循环中,所以我无法取消选中复选框来停止它


有没有办法阻止它进入无限循环?

有一种方法:不写无限循环?当复选框被选中时,您正在反复执行
//calculate stuff
部分(除非您在其中有一个
break
),并且由于它在ui线程上运行,ui被冻结

选中复选框的那一刻,就是将代码放入无限循环中。这将冻结页面,不允许用户取消选中该框。您可以使用setTimeout尝试类似的方法

function calc(){
if(conditionIsTrue){ // do smth here}
else{
//do another stuff here
}
}
const foo = () => {
  if (checkbox.checked) {
    //do math
    setTimeout( () => {
      foo();
    }, 3000)
  }
}

将函数设置为在单击复选框时启动,如果选中,则可以进行计算,3秒钟后它将再次递归调用自己,并检查复选框是否仍处于选中状态。

是的,有一种方法,它被调用。