如何使用setTimeout()调用jQuery(document).ready之外的函数?

时间:2009-09-03 20:22:33

标签: javascript jquery settimeout

我的代码类似于:

$(document).ready(function(){
    var cont = 0;

    function func1(cont)
    {
        //Some code here
        search.setSearchCompleteCallback(this, searchComplete, null);
        //Some other code
    }
    func1(cont);

    function searchComplete()
    {
        //Some code
        cont += 1;
    if (cont < length ) {
    func1(cont);
    } else {
            // Other code
    }
    }
});

所以我想做的是延迟执行func1(续);在searchComplete()函数内部。这样做的原因是所有代码都是使用Google搜索API和PageRank检查,我需要放慢脚本速度,这样我才不会被禁止。 (特别是关于公关检查的要求)。 如果我只是在func1(cont)上使用setTimeout();它说没有定义func1(),如果我尝试在$(document).ready()之外获取该函数,它会看到该函数,但Google代码不会因为它需要完全加载的页面。

如何修复setTimeout或如何暂停脚本几秒钟?

谢谢!

4 个答案:

答案 0 :(得分:5)

func1(cont);

作为

window.setTimeout(function() {
    func1(cont);
}, 1000);

答案 1 :(得分:1)

而不是像这样声明这个函数:

function func1(cont) {}

声明如下:

var func1 = function(cont) {}

您需要稍微重新安排代码:

$(document).ready(function(){
    var cont = 0;
    var func1;

    var searchComplete = function()
    {
        //Some code
        cont += 1;
        if (cont < length ) {
            func1(cont);
        } else {
                // Other code
        }
    }

    func1 = function(cont)
    {
        //Some code here
        search.setSearchCompleteCallback(this, searchComplete, null);
        //Some other code
    }

    func1(cont);
});

答案 2 :(得分:0)

我会尝试这样的事情。我更喜欢在jquery命名空间中声明变量和函数,但是您可以同样地移动cont变量和文档就绪函数之外的函数,并使它们全局可用。

$(document).ready(function(){
    $.cont = 0;
    $.func1 = function() {
        //Some code here
        search.setSearchCompleteCallback(this, $.searchComplete, null);
        //Some other code
    }

    $.searchComplete = function() {
        //Some code
        $.cont += 1;
        if (cont < length ) {
            setTimeout($.func1,1000);
        } else {
            // Other code
        }
    }

     setTimeout($.func1,1000); // delay the initial start by 1 second
});

答案 3 :(得分:0)

希望我的描述正确无误:

  • document.ready()事件触发
  • 在document.ready()内部,您希望在X毫秒
  • 之后调用函数
  • 此函数将Google对象search.setSearchCompleteCallback()连接到另一个函数(看起来它需要来自this的父对象)

如果是这种情况,为什么还需要在document.ready()范围内声明的任何函数?你不能简单地让所有3全球? e.g。

var search = null; // initialise the google object
var cont = 0;

function timedSearch()
{
  search.setSearchCompleteCallback(this, searchComplete, null);
}

function searchComplete()
{
   if (++cont < length) // postfix it below if this is wrong
       setTimeout(timedSearch,1000);
}

$(document).ready(function()
{
   setTimeout(timedSearch,1000);
}

如果我误解了,请用downvotes打我。