我的网页上有两个按钮“a”和“b”,其“onclick”事件绑定了两个javascript函数“x”和“y”。
当用户点击按钮“a”时,执行“x”开始,并且在执行功能“x”期间,用户按下按钮“b”。
现在我想实现一个逻辑,当按下“b”按钮时,“x”的执行应该立即停止,并且应该开始执行“y”。
是否可以在javascript中执行此操作?如果是,那么如何?
由于
答案 0 :(得分:0)
我担心一旦启动它就无法停止它,除非它是异步的(你可以像AJAX请求那样控制它)。
你可以在一个循环中做事,并且有一个取消条件的值。
答案 1 :(得分:0)
通常,javascript是单线程的,它会在执行时阻止用户界面。因此,当您按下按钮a并启动x功能时,导航器将不允许您按下按钮b直到x完成。
答案 2 :(得分:0)
您的问题有两个棘手的方面:
第一部分是棘手的,因为虽然用户可以随时点击按钮,但在执行上下文处理该特定事件之前,网页将不会意识到它。由于JS是单线程的,如果你在函数X的中间,在函数X完成之前你不会得到任何点击事件。
通过将您的函数拆分为小块并延迟执行来允许执行上下文处理工作时发生的事件,可以避免此问题。
function doSomeWork(nextFunction) {
// do work
setTimeout(nextFunction, 0); // allow event handling, then continue with nextFunction
}
关于这种异步编程有很多话要说,所以我不再赘述了。
乍一看第二个问题比较简单,有自己的问题。例如,在以下代码中: function Y() {
X();
Z();
}
function X() {
// stop execution please!
}
当你停止执行X(最有可能使用返回)时,它将只回落到Y,这将继续执行并调用Z.从你的问题看起来你想让它停止一切并开始一个全新的'线程”。
一个可能的解决办法就是从X中抛出一个没有被Y捕获的错误。那也将退出Y,但我不禁认为它是一个丑陋的黑客并且无法支持它。
也许有关您确切问题的详细信息,我们可以提出更简单/更好的答案。