如果在jQuery中再次调用,如何覆盖当前正在运行的函数?

时间:2012-01-27 23:24:22

标签: javascript jquery asynchronous

如果用户点击div,我会触发此功能。用户可以多次单击此div,从而多次触发该功能。

每次在函数运行时调用该函数,我希望当前运行的函数停止运行并重新开始。这很难描述,但我希望它有意义。基本上,我希望只有当用户在运行时不再触发该功能时,该功能才能完全运行。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:3)

Javascript是单线程的。因此,在第一次点击附加的javascript运行完成之前,第二次点击不会得到处理。

您可以在此处详细了解javascript事件队列的工作原理:How does JavaScript handle AJAX responses in the background?

如果您正在使用jQuery动画之类的异步操作,那么这些操作将在计时器中运行一小部分,您可以在运行动画时按下后续按钮。在那个原因中,你需要停止动画。使用jQuery,您可以使用.stop(true, true)方法停止当前动画,将其推进到完成并从队列中清除它。

如果您包含实际代码,我们可以针对您的情况提供更具体的答案。

答案 1 :(得分:3)

您的功能需要多长时间才能执行?听起来你最终想要限制点击次数,这样每X秒/毫秒只能注册一次。最好的方法是使用setTimeout延迟从单击执行函数,然后在每次用户单击时清除该超时。因此,如果他们在一秒内点击3次,它将只执行一次。

示例:函数每秒运行不会超过一次

var timeout;

function myClickHandler(){
    clearTimeout(timeout);
    timeout = setTimeout(function(){
        // Execute your code here
    }, 1000); // 1000ms delay
};