当前一个事件尚未完成处理时,如何处理Javascript中的后续事件?
我有一个文本框,其中定义了 onkeyup 事件。当事件发生时,它会调用一个函数,该函数可能需要更长的时间才能处理,以便在大多数情况下触发下一个 onkeyup 事件。
是否有一种可靠的方法可以中断/放弃之前的 onkeyup 事件并从下一个开始?
答案 0 :(得分:0)
你可以沿着这条线做点什么:
var isRunning = false;
var i = 0;
function runFunc() {
i++;
if (isRunning == false) {
isRunning = true;
keepRunning();
}
}
function keepRunning() {
while (i > 0) {
realProcessing();
i--;
}
isRunning = false;
}
var el = document.getElementById('field');
el.onkeyup = runFunc;
keepRunning()将在触发keyup事件时多次执行实际处理函数
我写下了这个并没有测试它(对我感到羞耻),但这样你可以达到你的结果(或类似的东西)。
ps:我仍然认为你可以在上面的代码中遇到并发问题,而且我非常有兴趣找到那些解决方案(或者证明我没有并发问题的人)。
答案 1 :(得分:0)
Javascript的工作方式类似于GUI,因此不会同时处理两个事件。
如果您的处理过于繁重,我认为最好的解决办法就是更改它,以便可以在很小的步骤中执行。然后,当您收到一个keyup事件时,您只需执行第一步,每个步骤都会进行setTimeout
调用,并且延迟为零,以触发下一步
这样重启你的计算是微不足道的。
它的工作原理是因为超时始终是最低优先级(即,如果有另一个密钥,这将立即处理,您将重新开始计算而不是继续前一个。)