当前一个事件还没有完成处理时,你如何处理Javascript中的后续事件?

时间:2011-02-02 20:24:58

标签: javascript events javascript-events

当前一个事件尚未完成处理时,如何处理Javascript中的后续事件?

我有一个文本框,其中定义了 onkeyup 事件。当事件发生时,它会调用一个函数,该函数可能需要更长的时间才能处理,以便在大多数情况下触发下一个 onkeyup 事件。

是否有一种可靠的方法可以中断/放弃之前的 onkeyup 事件并从下一个开始?

2 个答案:

答案 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调用,并且延迟为零,以触发下一步

这样重启你的计算是微不足道的。

它的工作原理是因为超时始终是最低优先级(即,如果有另一个密钥,这将立即处理,您将重新开始计算而不是继续前一个。)