检测jQuery触发器何时完成

时间:2014-03-24 16:07:19

标签: javascript jquery

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

当上述函数运行时,它会触发所有输入。如何判断由于上述操作而发生的所有事件何时完成?我想我问的是jQuery when方法,但我并不完全确定....

我的努力是:

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

更新:谢谢您的评论,这听起来像是在推翻这个问题。我担心触发器可能异步操作....

2 个答案:

答案 0 :(得分:1)

$('input').trigger('input')遵循顺序执行...假设没有处理程序执行异步处理....

如果他们确实有异步流程,那么我们运气不好,因为我们无法获得这些承诺......

如果目标处理程序没有启动异步进程,则在触发所有输入处理程序后将执行下一行。

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

因此,在上述情况下,只有在调用所有处理程序之后才会调用do something部分,但不一定在这些处理程序启动任何异步处理之后调用...

答案 1 :(得分: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)以使我的计数正确。