[问题] 有没有办法强制停止正在执行中的JavaScri

楼主: 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钮时就去改变那个变量的内容
作者: mrbigmouth (大嘴先生)   2016-05-22 16:17:00
一定要使用timeout系列函数 否则fn执行中使用者是完全不可能做到任何事的 包括卷卷轴或点击按钮都不行画面会整个当掉 因为JavaScript是单执行绪的执行环境使用者永远只可能在fn执行一段落后才可能动作
作者: eight0 (欸XD)   2016-05-22 22:52:00
fn() 并没有执行很久,而是执行“很多次”Abort 并不是在 fn() 执行中被按下的,而是在两次 fn() 之间被按下的fn() 和 setTimeout(fn) 的效果是不一样的
作者: shadowjohn (转角遇到爱)   2016-05-22 23:28:00
用 flag吧~true时可跑,false return掉
作者: mrbigmouth (大嘴先生)   2016-05-23 07:16:00
eight0说的没错 还有像ajax在发送出去到回来之间function也是没在执行的所以能中间中断的function 只可能是setTime系列那种本身自己就不断中断不断执行的function 方法其他人说很多了 但你原本问的那种直接中断function是不允许的
作者: mirtac (mirtac)   2016-05-23 14:04:00
基本上是做不到的, 除非使用worker, 但要注意 worker中不能存取 dom , 还有较旧的browser不支援worker
作者: mrbigmouth (大嘴先生)   2016-05-23 16:30:00
自己用变量纪录现在在哪个步骤囉

Links booklink

Contact Us: admin [ a t ] ucptt.com