作者:
red0whale (red whale)
2016-05-22 15:00:30<script>
var fn = function(url){
// bla bla bla...
};
</script>
<input type="button" onclick="fn()" value="Execute">
<input type="button" onclick="???" value="Abort">
如上,當使用者按下“Execute”按鈕時,“fn()”函數就會被執行。
假設fn()函數會執行很久,
如果使用者想在中途停止這個函數的執行(按“Abort”按鈕),
請問我該怎麼做?
如果說“fn()”函數有哪些的話,就像AJAX或其他可能要跑很久的程式
當然,除了AJAX之外還有可能是其他哩哩摳摳的函數。
不管,反正就是要強制讓該函數停止的方法為何?
作者:
Kenqr (function(){})()
2016-05-22 16:05:00先檢查某個變數為true時,再setTimeout按abort鈕時就去改變那個變數的內容
一定要使用timeout系列函數 否則fn執行中使用者是完全不可能做到任何事的 包括捲卷軸或點擊按鈕都不行畫面會整個當掉 因為JavaScript是單執行緒的執行環境使用者永遠只可能在fn執行一段落後才可能動作
作者:
eight0 (欸XD)
2016-05-22 22:52:00fn() 並沒有執行很久,而是執行「很多次」Abort 並不是在 fn() 執行中被按下的,而是在兩次 fn() 之間被按下的fn() 和 setTimeout(fn) 的效果是不一樣的
用 flag吧~true時可跑,false return掉
eight0說的沒錯 還有像ajax在發送出去到回來之間function也是沒在執行的所以能中間中斷的function 只可能是setTime系列那種本身自己就不斷中斷不斷執行的function 方法其他人說很多了 但你原本問的那種直接中斷function是不允許的
作者:
mirtac (mirtac)
2016-05-23 14:04:00基本上是做不到的, 除非使用worker, 但要注意 worker中不能存取 dom , 還有較舊的browser不支援worker