2012-01-26 13 views
6

Tengo una situación en la que tengo que hacer varias acciones en una página para inicializar su configuración. Todavía no tengo ningún código porque, francamente, tengo problemas para encontrar un lugar donde comenzar.jQuery: desencadenar eventos .click(), uno detrás de otro

Esto es lo que quiero hacer:

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'); 

}); 

¿Cómo se logra esto?

+0

¿Ha considerado llamar a los otros activadores dentro de la devolución de llamada AJAX? – Corbin

+2

¿Por qué no crea una función Init() a la que llama después de cargar la página que llamará a todas las funciones a las que se llama en los eventos click? – RandomWebGuy

Respuesta

10

dentro de su primer manejador se puede utilizar un objeto diferido, lo resolverá de la devolución de llamada ajax éxito y devolver una promesa por lo que haría su cadena de código como este (no he probado)

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

de http://api.jquery.com/category/deferred-object/

jQuery.Deferred(), introducido en la versión 1.5, es un objeto de utilidad chainable que puede registrar múltiples devoluciones de llamada en colas de devolución de llamada, invocar colas de devolución de llamada, y transmitir el éxito o el estado de fallo de cualquier función síncrona o asíncrona.

Nota: He utilizado triggerHandle() en lugar de trigger(): http://api.jquery.com/triggerHandler/ acaba de ser agnóstico sobre los elementos a los que ha conectado la manipuladores. Use trigger() si es adecuado para sus necesidades

Cuestiones relacionadas