等待JQuery事件的结束以执行另一个事件

时间:2012-07-24 12:18:46

标签: focus jquery

实际上我在一些输入上有一个带有JQuery focusOut事件的表单。 但是,如果重点是其中一个输入并且用户想要提交。我需要在执行submit事件之前等待focusOut事件的结束。

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:3)

使用一对旗帜不应该太难。如果您希望在完成某项操作之前暂停表单提交,只需:

  1. 当你开始想要等待的东西时设置一个标志(inProgress或其他)

  2. 挂钩提交活动

  3. 如果设置了inProgress标志,请取消提交事件并设置一个标志,表明表单需要提交(submitPending或其他)

  4. 当其他事情完成时,请清除inProgress标记,如果设置了submitPending,请提交表单

  5. 重要的是你知道完成的事情。如果您不确定#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();
                }
            });
        });
    })();