2011-05-18 105 views
0

我想優先考慮我的函數。jQuery在自己的函數準備就緒時做些什麼

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

我該如何做到這一點與jQuery?

感謝,REPAS

+0

如果showLinks被定義在當前塊之上的SCRIPT塊中,那麼它已經準備就緒。 – 2011-05-18 12:47:10

回答

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

+0

並且當函數完成時調用dfd.resolve() – 2011-05-18 12:55:32

+0

@Gary的確如此!我剛剛在jsFiddle上放了一個測試用例。在我的回答中添加了一個鏈接! – mekwall 2011-05-18 13:03:00

1

調用showLinks()內drawMap()調用 drawChart()內,並在年底showLinks()

+0

這對我不好,我想保留後續結構。 – 2011-05-18 12:46:51

+0

檢查下面,這很有趣 – beerwin 2011-05-18 12:58:07

0

你能扔從showLinks()函數的自定義事件?然後你可以捕捉到這個事件並作出相應的反應。

這是bindtrigger之間的好戲。這是docs

1
  • 如果showLinks() & drawMaps()是不是異步然後就打電話drawChart()後直:

    $(document).ready(function(){ 
        drawMap(); 
        showLinks(); 
        drawChart(); 
    }); 
    
  • 否則提供一個回調showLinks()

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

很難說出代碼中什麼是和不是同步和異步,但在任何情況下,提供回調(如上例所示)都是前進的方向。