表单提交保持循环

时间:2012-06-22 17:10:19

标签: javascript jquery html

PHere应该发生的事情:

单击按钮时,表单的提交被禁用。然后文本交换运行。完成文本交换后,取消的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>

1 个答案:

答案 0 :(得分: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()触发之前不会发生。