私は実際に、いくつかの入力でJQueryfocusOutイベントを含むフォームを持っています。ただし、この入力の1つに焦点が当てられており、ユーザーが送信したい場合。送信イベントを実行する前に、focusOutイベントの終了を待つ必要があります。
誰かがそれを行う方法を知っていますか?
フラグのペアを使用するのはそれほど難しいことではありません。何かが完了するまでフォームの送信を保留したい場合は、次のようにしてください。
inProgress
待ちたいものを始めるときにフラグ(または何でも)を設定します
送信イベントをフックします
inProgress
フラグが設定されている場合は、送信イベントをキャンセルし、フォームを送信する必要があることを示すフラグを設定します(submitPending
または何でも)
inProgress
もう1つ完了したら、フラグをクリアし、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();
}
});
});
})();