实际上,我在某些输入上有一个带有 JQuery focusOut 事件的表单。但是如果焦点在这个输入之一并且用户想要提交。在执行提交事件之前,我需要等待 focusOut 事件结束。
有人知道怎么做吗?
使用一对标志不应该太难。如果您想在完成某些事情之前暂停表单提交,只需:
inProgress
当你开始你想等待的事情时设置一个标志(或其他)
挂钩提交事件
如果inProgress
设置了标志,请取消提交事件并设置一个标志,说明表单需要提交(submitPending
或其他)
当其他事情完成时,清除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();
}
});
});
})();