как связать несколько кликов jQuery, когда второй клик должен ждать первого клика ajax - PullRequest
0 голосов
/ 05 июля 2011

У меня есть набор элементов, которые действуют как кнопки, по которым пользователи могут нажимать. В определенных обстоятельствах я хочу сам нажимать на кнопки. Я добавил обработчики событий щелчка ко всем этим элементам, и они отлично работают.

Проблема в том, когда я хочу принудительно нажать две кнопки подряд, например:

jQuery('#spProfileTab-some-button').click();
jQuery('#spProfileMenu-another-button').click();

однако это не работает, потому что обработчик щелчка для второго не привязан, пока не завершится ajax для обработчика первого щелчка.

По сути, их нужно объединить в цепочку или подождать, пока завершится первый, но пока не нашел правильный синтаксис. любая помощь будет оценена.

Ответы [ 5 ]

0 голосов
/ 05 июля 2011

Я бы, вероятно, использовал метод deferred.done (), как описано здесь: http://api.jquery.com/deferred.done/

В вашем примере "принудительного нажатия" вы, вероятно, вызовете метод .done (), в котором вы создали свой вызов AJAX.

Так как ...

$.get("ajax.php").done(function() { 
    $('another-button').click();
});
0 голосов
/ 05 июля 2011

Если я не понял ваш вопрос, по звуку этого обработчик щелчка по первому элементу вызывает функцию AJAX (возможно, jQuery get, post или load)?

Если это так, вы должны иметь возможность просто нажать на ваш второй элемент в функции обратного вызова, например что-то вроде этого:

$.post("somepage.php", function(data) {
    //Successful AJAX call
    $('#spProfileMenu-another-button').click();
});

Я предполагаю, что событие click для первого элемента выглядит примерно так:

$('#spProfileTab-some-button').click(function() {
    //AJAX call as above
});
0 голосов
/ 05 июля 2011

Вам нужно вызвать второй щелчок от обратного вызова ajax.Так, если вы используете load (), например, вы будете

$('selector').load('content',function(){$(otherselecter).click()});

У вас нет цепочки / очереди, потому что точка с запятой действительно делает эти 2 отдельные команды.Так что просто имейте это в виду.

0 голосов
/ 05 июля 2011

Итак, последовательность событий, которую вы хотите: 1) нажата какая-то кнопка, 2) AJAX в обработчике нажатия кнопка some привязывает обработчик нажатия к другой кнопке, 3) этот обработчик нажатия называется?

В этом случае вам нужно запустить 3) в конце обработчика успеха AJAX для 2, то есть

$('some-button'.click( function() {
  $.ajax( {... success: function() {
    ...
    $('another-button').click(another-button-handler);
    $('another-button').click();
  }
});

Поскольку вызов AJAX является асинхронным, вы гарантируете, что вызов click ()другая кнопка обрабатывается после завершения AJAX и привязки нового обработчика щелчков.

0 голосов
/ 05 июля 2011

Вы можете использовать JQuery триггер,

см. Документацию здесь

http://api.jquery.com/trigger/

...