0

PHe 是应该发生的事情:

单击按钮时,表单的提交被禁用。然后运行文本交换。文本交换完成后,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,然后提交表单。这导致表单只提交一次。

另外,如果btn-submit是提交按钮,则将输入类型更改为,button而不是submit,进行此更改意味着您不需要将侦听器添加到 onSubmit 事件,因为按钮本身就是用作提交事件。这也减轻了调用preventDefault()事件的需要,因为事件在使用 触发之前不会发生form.submit()

于 2012-06-22T17:21:07.657 回答