2

私は実際に、いくつかの入力でJQueryfocusOutイベントを含むフォームを持っています。ただし、この入力の1つに焦点が当てられており、ユーザーが送信したい場合。送信イベントを実行する前に、focusOutイベントの終了を待つ必要があります。

誰かがそれを行う方法を知っていますか?

4

1 に答える 1

3

フラグのペアを使用するのはそれほど難しいことではありません。何かが完了するまでフォームの送信を保留したい場合は、次のようにしてください。

  1. inProgress待ちたいものを始めるときにフラグ(または何でも)を設定します

  2. 送信イベントをフックします

  3. inProgressフラグが設定されている場合は、送信イベントをキャンセルし、フォームを送信する必要があることを示すフラグを設定します(submitPendingまたは何でも)

  4. 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();
            }
        });
    });
})();
于 2012-07-24T12:41:56.007 に答える