2012-01-26 55 views
6

我有一種情況,我必須在頁面上執行多個操作才能初始化它的設置。我還沒有任何代碼,因爲坦率地說,我很難找到一個地方開始。jQuery:觸發.click()事件,一個接一個

這是我想做的事:

jQuery(document).ready(function($) { 

    $('#element-one').trigger('click'); 
    // wait for the first trigger event to complete (it loads ajax content into a div tag) 
    // then move on to this one... 
    $('#element-two').trigger('click'); 
    // then move on to this one... 
    $('#element-three').trigger('click'); 
    // then move on to this one... 
    $('#element-four').trigger('click'); 
    // then finally move on to the last one 
    $('#element-five').trigger('click'); 

}); 

這是如何實現的呢?

+0

您是否考慮過在AJAX回調中調用其他觸發器? – Corbin 2012-01-26 22:46:26

+2

爲什麼不創建一個在頁面加載後調用的Init()函數,它會調用點擊事件中調用的所有函數 – RandomWebGuy 2012-01-26 22:47:04

回答

10

你的第一個處理程序中,你可以使用一個延遲的對象,解決它在阿賈克斯成功回調,並返回一個承諾,所以你會從http://api.jquery.com/category/deferred-object/鏈您這樣的代碼(我沒有測試)

$.when(
    $('#element-one').triggerHandler('click') /* asynchronous task */ 
).done(function() { 
    $('#element-two').triggerHandler('click') /* synchronous task */ 
    ... 
    $('#element-five').triggerHandler('click') /* synchronous task */ 
}) 

jQuery.Deferred(),在1.5版本中引入的,是一個可鏈接的公用對象,可以多個回調註冊到回調隊列中,調用回調隊列和中繼任何同步或異步函數的成功或失敗的狀態。

注:我用triggerHandle()代替trigger()http://api.jquery.com/triggerHandler/只是爲了給你附加的處理程序元素無關。如果它適合您的需求,請使用trigger()

相關問題