Определение окончания триггера jQuery

0
$('input').trigger('input')

когда эта функция работает, она запускается на всех входах. Как я могу узнать, когда все события, произошедшие в результате вышеупомянутого действия, завершены? Я думаю, что я спрашиваю о jQuery, when метод, но я не совсем уверен....

Мое усилие:

$.when( $('input').trigger('input')).done(
   function (x) {
      if (!$('#mybutton').hasClass('clobbered') {
         submitData();
      }
   }
);

Обновление: Спасибо за ваши комментарии, похоже, я переусердствовал с проблемой. Я был обеспокоен тем, что триггер может работать асинхронно....

  • 3
    $('input').trigger('input') следует за последовательным выполнением ... учитывая, что ни один из обработчиков не выполняет асинхронный процесс ... если они это делают, нам не повезло, поскольку у нас нет доступа к этим Обещания ... если не существует асинхронного процесса, инициированного целевыми обработчиками, то следующая строка будет выполнена после того, как все обработчики ввода будут запущены
  • 0
    Спасибо, звучит так, как будто я слишком много думал ;-P
Показать ещё 1 комментарий
Теги:

2 ответа

1
Лучший ответ

$('input').trigger('input') следует за последовательным выполнением... учитывая, что ни один из обработчиков не выполняет асинхронный процесс...

Если у них есть асинхронные процессы, нам не повезло, поскольку у нас нет доступа к этим обещаниям...

Если асинхронный процесс, инициированный целевыми обработчиками, не выполняется, следующая строка будет выполнена после того, как будут запущены все обработчики ввода.

$('input').trigger('input')
//do something

Таким образом, в приведенном выше случае часть do something будет вызвана только после вызова всех обработчиков, но не обязательно после любого асинхронного процесса, инициированного этими обработчиками...

0

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

Поэтому я сделал небольшой эксперимент, как показано ниже:

<input type="text">
<input type="text">
<input type="text">
<input type="text">
<input type="text">

<button type="button">Not yet!</button>
var numberOfInputs = 5;
var eventCounts = 0;

$(document).on('input', function (e) {
    eventCounts++;    
    if (numberOfInputs === eventCounts) {
        $('button').text('Ready to go!');
    }
});

$('input').trigger('input');

Это просто работает.

Я предполагаю, что вы точно знаете, сколько input вас есть, но это нормально, если не так, вы можете проверить length $(input) чтобы сделать правильный подсчет.

  • 0
    Я не уверен, что твой пример верен. Я рассчитываю на то, что событие триггера завершилось сразу после оператора, и я был обеспокоен тем, что триггер может работать асинхронно.
  • 0
    Меня смущает ваша необходимость "триггер работать асинхронно"? события никогда не будут запускаться асинхронно, но обратный вызов есть. Вы запускаете событие, другие слушают его и выполняют обратный вызов, этот обратный вызов не будет блокировать последовательные коды. Вы хотите, чтобы обратный вызов вызывался только тогда, когда счетные события были прослушаны, вы просто делаете счет. Как только условие выполнено, обратный вызов будет запущен немедленно. Я не понимаю, почему мой код не соответствует вашим требованиям. Я разместил эти коды в Интернете, проверьте их: jsfiddle.net/nightire/4Wng8 , возможно, расскажите нам, что вы хотите архивировать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню