如何控制javascript函数的执行?
我的网页上有两个按钮“a”和“b”,它们的“onclick”事件与两个javascript函数“x”和“y”绑定 当用户点击按钮“a”时,“x”开始执行,比如说在功能“x”执行期间,用户按下按钮“b”。如何控制javascript函数的执行?,javascript,javascript-events,Javascript,Javascript Events,我的网页上有两个按钮“a”和“b”,它们的“onclick”事件与两个javascript函数“x”和“y”绑定 当用户点击按钮“a”时,“x”开始执行,比如说在功能“x”执行期间,用户按下按钮“b”。 现在我想实现一个逻辑,当按下“b”按钮时,“x”的执行应该立即停止,“y”的执行应该开始 可以用javascript实现吗?如果是,那怎么办 谢谢我担心,除非函数是异步的(并且可以像AJAX请求一样控制它),否则一旦它启动,您就无法停止它 您可以在循环中执行操作,并在某些取消条件下设置一个值。一
现在我想实现一个逻辑,当按下“b”按钮时,“x”的执行应该立即停止,“y”的执行应该开始 可以用javascript实现吗?如果是,那怎么办
谢谢我担心,除非函数是异步的(并且可以像AJAX请求一样控制它),否则一旦它启动,您就无法停止它
您可以在循环中执行操作,并在某些取消条件下设置一个值。一般来说,javascript是单线程的,它在执行时会阻塞用户界面。因此,当您按下按钮a并启动功能x时,导航器将不允许您按下按钮b,直到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(最有可能使用return)时,它只会返回到Y,Y将继续执行并调用Z。从您的问题来看,似乎您希望它停止一切并启动一个全新的“线程”
一个可能的解决办法是从X中抛出一个错误,这个错误在Y.没有被捕获,它也会退出Y,但是我不能不认为它是一个丑陋的黑客并且不能支持它。
也许有了更多关于你的具体问题的细节,我们可以想出更简单/更好的答案。太理论化了,请提供一些代码,然后我们可以帮助-换句话说:不知道x和y在做什么以及如何杀死它们,就不可能回答。不,这不是直接可能的,因为在javascript执行完成之前,不会处理按钮单击。解决方案可能是使用webworkers,或者使用setTimeout将您的函数切割成小函数。