【发布时间】:2015-05-25 12:41:20
【问题描述】:
所以我有一个表单,我在提交之前使用 jquery-form-validator 插件进行验证!但是这里的问题是写在success 上的几行代码在逐步执行时没有被执行。 但是,如果在 console 中执行或在 debugger 中执行,它们可以正常工作。真的是一种诡异的行为!!有什么解决方法可以解决这个问题吗?
JS
$.validate({
form:'#contact-form',
onError: function () {
toastr.error("Please correct the below errors!", "Error");
return false;
},
onSuccess: function () {
$("#btnContactUs").button('loading'); //Not getting called
$('.form-contact form').find('input,textarea').attr('readonly', true).addClass('disabled'); //Not getting called
var formdata = new FormData($('.form-contact form').get(0));
$.ajax({
url: $("#contact-form").attr('action'),
type: 'POST',
data: formdata,
processData: false,
contentType: false,
success:function(data)
{
if(data.result)
{
toastr.success(data.message, "Success");
$('.form-contact form').get(0).reset();//Check this
}
else
{
toastr.error(data.message, "Error");
}
},
error:function(data)
{
toastr.error(data.message, "Error");
}
});
$("#btnContactUs").button('reset');
$('.form-contact form').find('input,textarea').attr('readonly', false).removeClass('disabled');
return false; // Will stop the submission of the form
}
});
验证成功后,它通过 ajax 调用 Controller 方法,但不执行前 2 行。
更新:按钮#btnContactUs 是一个引导按钮,具有.button 功能来显示加载文本。
【问题讨论】:
-
afaik
.button什么都不是 - 使用.text('loading') -
另外,第 2 行应该做什么?禁用所有表单元素?
-
你能在你的 ajax 调用中尝试使用 asyn:false 吗
-
@Darren Sweeney.. 对不起!!忘了说!!这是一个引导按钮,您可以在其中使用
.button功能来显示加载文本!是的,第 2 行不会disable,而只是为所有表单元素添加一个只读属性,仅出于 UI 目的,我为该disabled类定义了一些CSS!! -
我认为你的 onSuccess() 方法的 return false 在你的内部 ajax 成功回调可以运行之前执行。当你放一个调试器时,ajax成功回调事件发生,你的代码运行正常。
标签: javascript jquery ajax forms jquery-form-validator