0

我想优先考虑我的功能。

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

我怎么能用 jQuery 做到这一点?

谢谢, Répás

4

4 回答 4

1

在 drawMap() 内部调用 showLinks() 在内部和最后调用 drawChart() showLinks()

于 2011-05-18T12:46:01.533 回答
1

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

您可能想看看jQuery 1.5 中引入的延迟。

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

$(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();
}

检查jsFiddle 上的测试用例

于 2011-05-18T12:48:48.817 回答
1
  • 如果showLinks() & drawMaps()不是异步的,那么就直接调用drawChart()

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

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

很难分辨代码中什么是同步和异步,但无论如何提供回调,如上面的示例所示,是前进的方向。

于 2011-05-18T12:49:10.533 回答
0

你能从你的 showLinks() 函数中抛出一个自定义事件吗?然后你可以捕捉到这个事件并做出相应的反应

bind和之间的好戏trigger。这是文档

于 2011-05-18T12:47:57.073 回答