2012-01-26 53 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()

相关问题