2

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

有人知道怎么做吗?

4

1 回答 1

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();
            }
        });
    });
})();
于 2012-07-24T12:41:56.007 回答