2017-02-26 196 views
0

所以我正在制作一个使用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> 

问题是,当我选中复选框,网页只是冻结,因为它是停留在一个无限循环,所以我不能取消选中该复选框来阻止它。

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

+0

是的,有一种方法,它被称为[事件监听](https://developer.mozilla.org/en-US/docs/Web/Events)。 – Teemu

回答

0

当您选中该复选框时,您将代码放入无限循环。这会冻结页面,并且不允许用户取消选中该框。你可以像setTimeout那样尝试一些东西。

const foo =() => { 
    if (checkbox.checked) { 
    //do math 
    setTimeout(() => { 
     foo(); 
    }, 3000) 
    } 
} 

设置点击复选框何时启用功能,如果被选中,你可以做的计算,它会递归地在3秒后再次调用自身,并检查复选框被选中依旧。

0
function calc(){ 
if(conditionIsTrue){ // do smth here} 
else{ 
//do another stuff here 
} 
} 
0

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