jquery使用提交处理程序验证$ .post

时间:2014-03-24 17:58:35

标签: jquery ajax jquery-validate .post

我正在使用jquery mobile构建一个小应用程序,并使用jqueryvalidate http://jqueryvalidation.org/进行表单验证。我设法使用ajax发布了一个帖子,但是一旦我将它移动到submitHandler:function(form)它仍然"工作"但我必须点击提交两次才能正常工作?请帮助我感到困惑!

//the validation stuff
$().ready(function() {      
// validate new id form
$("#addId").validate({
    errorPlacement: function(error, element) {
        error.insertAfter(element.parent()); // <- make sure the error message appears after parent element (after textbox!)
                        },
        rules: {
            idDesc: "required",
            },
         messages: {
            idDesc: "Please enter a valid description",
                },

        submitHandler: function(form) {
            $('#submit').click(function()
            {
                              $('#addCustId').popup('close');
                              $.post("Customer_AddNewCustomerId.php", $("#addId").serialize(),  function(response)
                                        {
                                             LoadCustomerIdentificationType();
                                        });
                                    });
                            }
                    }); //end validate
                }); // end function

谢谢:)

1 个答案:

答案 0 :(得分:1)

这是完全错误的......

submitHandler: function(form) {
    $('#submit').click(function() {  // <-- causing your double-click situation
        ....
        $.post(....);
    });
}

As per the documentation for the submitHandler callback function

  

“在表单有效时回调处理实际提交。获取表单作为唯一参数。替换默认提交。通过Ajax提交表单的正确位置已经过验证。“

换句话说,只有在有效表单上单击按钮时才会触发。该插件自动处理click,因此将该函数包装在另一个click处理程序中是毫无意义的,适得其反。

这样做......

submitHandler: function(form) {
    ....
    $.post(....);
    return false;  // not necessary, but it reminds me that the default is blocked
}

如果您愿意,可以省略return false;行。我总是把它放入(不会伤害任何东西),因为它提醒我表单上的默认action不会发生。