在preventDefault()之后没有正确提交表单的jQuery submit()

时间:2014-07-21 12:55:32

标签: jquery forms preventdefault

我有一张表格,它向paypal提交了价值......

在提交给paypal之前我想以编程方式检查变量并将它们保存到数据库

为此,我有一个on(submit)代码拦截默认的表单操作,并首先将变量提交给我的脚本进行预处理..

然后一旦OK,我就会调用表单的提交函数..

结果=表单是发布BLANK / ZERO变量

cleared_to_submit = 0;
$("#my_form").on("submit", function(e){


    if(cleared_to_submit){
        cleared_to_submit = 0;
        return;
    }else{
        e.preventDefault();
        postvars = $(this).serializeArray();
        $(this).find(":input").prop("disabled",true);


        url = "?act=pay_now&";
        $.post( url, postvars ,function(data){
            var stat = data.stat;

            if(stat == 'ok'){
                cleared_to_submit = 1;
                $("#my_form").submit(); //resubmit form

            }else if( stat == 'input_error'){

                showAlert(statMsg, "danger");

                $("#my_form").find(":input").prop("disabled",false);

            }else{ // ERROR
                $("#my_form").find(":input").prop("disabled",false);
                showAlert("Error:" + statMsg, "error");

            }
        });
    }




});

这是预期的副作用吗?

3 个答案:

答案 0 :(得分:3)

cleared_to_submit函数完成您需要执行的操作后,尝试使用e.preventDefault()而不是使用标记$(this).unbind("submit").submit();$("#my_form").on("submit", function(e){

基本上我想说的是:一旦您在.submit()事件中验证了表单,就可以使用此代码提交表单而不调用{{1}事件你已经绑定了。

例如:

.submit()

我不确定这会解决您的问题,但它可以让您了解如何更轻松地验证表单。

答案 1 :(得分:1)

这是因为我停用了表单input字段

$(this).find(":input").prop("disabled",true);

并且在调用submit()之前没有重新启用它们,如果表单输入字段被禁用,那么它们的变量也是如此。

答案 2 :(得分:0)

在调用$(this).find(":input").prop("disabled",true);方法后尝试放置$.post,如果输入表单被禁用,POST方法变量将为空