2017-02-26 202 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被凍結。