我正在使用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
谢谢:)
答案 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
不会发生。