2012-07-24 117 views
2

实际上,我在某些输入上有一个带有JQuery focusOut事件的窗体。 但是,如果重点是其中的一个输入和用户想提交。在执行提交事件之前,我需要等待focusOut事件的结束。等待一个JQuery事件的结束来执行另一个

有人知道该怎么做吗?

+0

可以显示一些代码,你有什么到目前为止已经试过?或使一个[小提琴](http://jsfiddle.net/) – 2012-07-24 12:37:42

回答

3

使用一对标志不应该太难。如果你想撑起表单提交的东西完成之前,只是:

  1. 设置标志(inProgress或其他)当您启动的事情要等待

  2. 挂钩提交事件

  3. 如果inProgress标志设置,取消提交事件,并设置一个标记,形式提交需求(submitPending或其他)

  4. 当其他的事情完成,清除inProgress标志,如果submitPending设置,提交表单

重要的是,你知道的东西完成。如果你不知道,当然#4会开火,你不想取消#3中的提交。

因此,举例来说,假设#theField是外地和#theForm的形式,它会是这个样子:

(function() { 
    var inProgress = false, 
     submitPending = false; 

    // #2 
    $("#theForm").submit(function() { 
     if (inProgress) { 
      // #3 
      submitPending = true; 
      return false; 
     } 
    }); 
    $("#theField").on("focusOut", function() { 
     inProgress = true; 
     startThingThatTakesTimeLikeAnimationOrAjax(function() { 
      // This is the completion callback of the thing that takes time 

      // #4 

      // No longer in progress 
      inProgress = false; 

      // Submit if one is pending 
      if (submitPending) { 
       $("#theForm").submit(); 
      } 
     }); 
    }); 
})(); 
+0

有点棘手,但它的作品谢谢! – kschaeffler 2012-07-24 13:31:22

+0

@kschaeffler:不客气,很高兴帮助。 – 2012-07-24 13:32:58

相关问题