当自己的函数准备就绪时,jQuery会做一些事情

时间:2011-05-18 12:42:37

标签: jquery events function parallel-processing ready

我想优先考虑我的职能。

$(document).ready(function(){
drawMap();
on showLinks() ready do drawChart();
});

我如何用jQuery做到这一点?

谢谢,Répás

4 个答案:

答案 0 :(得分:1)

在drawMap()中调用showLinks() 在内部和末尾调用drawChart()showLinks()

答案 1 :(得分:1)

正如Gary在他的回答中已经提到的那样,如果您正在处理异步执行,那么您只想这样做。

您可能需要查看jQuery 1.5中引入的deferreds

在你的情况下,它看起来像这样:

$(function(){
    drawMap();
    $.when(showLinks())
        .then(drawChart);
});

要完成上述工作,您必须确保showLinks函数返回promise并在执行完毕后触发resolve

function showLinks(){
    var dfd = $.Deferred();

    // Add your asynchronous code here
    setTimeout(function(){
        console.log("Links shown!");
        dfd.resolve(); 
    }, 1000);

    return dfd.promise();
}

检查test case on jsFiddle

答案 2 :(得分:1)

  • 如果showLinks() & drawMaps()不是异步,则只需在drawChart()之后直接调用:

    $(document).ready(function(){
       drawMap();
       showLinks();
       drawChart();
    });
    
  • 否则会向showLinks()提供回调:

    function showLinks(callback)
    {
        /* your code */
        callback();
    }
    
    $(document).ready(function(){
       drawMap();
       showLinks(drawChart);
    });
    

很难说出你的代码中是什么和不同步和异步,但无论如何提供回调,如上例所示,是前进的方法。

答案 3 :(得分:0)

您可以从showLinks()函数中抛出自定义事件吗?然后你可以抓住这个事件并做出相应的反应

bindtrigger之间的比赛很好。以下是docs