多次触发时运行一次js功能

时间:2012-03-16 18:43:04

标签: javascript jquery

我有一个使用jQuery加载带有javascript函数的文件/内容的Div ..

function DoWork() {
    // Do Stuff
}

让我们说用户可以重新加载Div并使用相同的js函数DoWork()拉出相同的文件/内容。问题是,当重新加载文件时,先前加载的函数DoWork()仍在运行。如何杀死先前解雇的DoWork()并重新启动它?

3 个答案:

答案 0 :(得分:3)

Javascript是单线程的,这意味着在给定时刻只能执行一件事。如果DoWork已经“正在运行”,那么要么a)阻止所有其他JS代码,你别无选择,只能让它完成,因为你无法执行任何中断代码,直到它自己完成,或者b )DoWork计划在setTimeout()setInterval()的某个时间间隔内启动。

如果是后一种情况,setTimeout()setInterval()会返回一个ID。将该ID存储在某处,并根据您的启动方式致电clearTimeout(doWork_timeout_id)clearInterval(doWork_interval_id)

答案 1 :(得分:1)

您可以构建一个使用的简单函数:setTimeout然后每次调用DoWork将首先调用:clearTimeout。我真的不喜欢这个解决方案,因为你会在setTimeout上浪费CPU。 所以另一种选择是在DoWork中使用Web worker(如果你在另一个线程中运行大数据的话,它将为你做很多其他的好事) - 然后你可以选择发送'stop'消息你开始DoWork()工作的时候了。

答案 2 :(得分:0)

你使用ajax加载div的内容吗?如果是这样,更好的方法如下:

var doWorkAjax=null;
function DoWork(){
    if (doWorkAjax) doWorkAjax.abort(); 
    doWorkAjax = $.ajax(url, data, function(result){
        ....
        doWorkAjax=null;
    });
}