0

PHere が起こるはずのことです:

ボタンをクリックすると、フォームの送信が無効になります。次に、テキスト スワップが実行されます。テキスト スワップが完了すると、cancel の var が false に切り替わり、フォームが送信されます。

問題は、form.submit() が起動するとループし、テキストが継続的にフェードインおよびフェードアウトすることです。これにより、フォームが送信されなくなります。

<script type="text/javascript">
    var cancel = true;

    $("#btn-submit").click(

    function () {
        if (cancel == true) {
            $('form').on('submit', function (ev) {
                ev.preventDefault();
                form = $(".submit-form");
                fp = $('#free-planner');
                fp.fadeOut(350, function () {
                    fp.text('Check your email!');
                });
                fp.fadeIn(350, function () {
                    cancel = false;
                    if (cancel == false) {
                        form.submit();
                    }
                });
            });

        }
    });
</script>
4

1 に答える 1

1

cancel 変数を false に設定してループを作成し、false である限りフォームを送信するように指定します。

次のことを試してください。

var cancel = true;

$("#btn-submit").click(function () {
    if (cancel == true) {
        form = $(".submit-form");
        fp = $('#free-planner');
        fp.fadeOut(350, function () {
            fp.text('Check your email!');
        });
        fp.fadeIn(350, function () {                                       
            if (cancel == true) { 
               cancel = false;           
               form.submit();                     
            }                 
        });
    }
});

これにより、キャンセル変数が元の状態である true から変更されていないかどうかを確認し、状態を false に変更してからフォームを送信するようにロジックが少し変更されます。これにより、フォームは 1 回だけ送信されます。

さらに、btn-submitが送信ボタンの場合は、入力タイプをbuttonではなく にsubmit変更します。この変更を行うと、ボタン自体が送信イベントとして機能するため、 onSubmit イベントにリスナーを追加する必要がなくなります。preventDefault()これにより、イベントは でトリガーされるまで発生しないため、イベントを呼び出す必要も軽減されform.submit()ます。

于 2012-06-22T17:21:07.657 に答える