我正在做一些表格验证,而我正在努力完成我想要完成的任务。我希望能够在字段的模糊处验证我的邮政编码,但也可以调用相同的函数来验证表单提交时的zip,并防止在邮政编码无效时提交表单。我的代码(通常)就是这样的。
function validateZipCode(event){
$.getJson(
url,
params,
function(data){
if(data.response === false){
someError.show();
event.preventDefault(); //stop the form from being submitted
}
}
);
}
$('#someForm').submit(function(event){
validateZipCode(event);
});
$('#zipInput').blur(function(event){
validateZipCode(event);
})
我已尝试使用此jQuery pass more parameters into callback帖子中的方法,但我似乎无法完成我需要的工作。任何帮助表示赞赏。
答案 0 :(得分:8)
不,当AJAX事件的回调触发时,事件将已经冒泡并且表单已提交。您可以实现此目的的一种方法是从提交中取消表单,然后如果它从AJAX请求中传递了需求,则手动提交。
答案 1 :(得分:2)
您需要在事件冒泡并由浏览器处理之前阻止事件的默认操作。 $ .getJson返回控件并允许validateZipCode函数先完成,所以你需要这样做:
function validateZipCode(event){
event.preventDefault(); //stop the form from being submitted
$.getJson(
url,
params,
function(data){
if(data.response === false){
someError.show();
}
}
);
}
$('#someForm').submit(function(event){
validateZipCode(event);
});
$('#zipInput').blur(function(event){
validateZipCode(event);
})
答案 2 :(得分:1)
不,如果不使用ajax()方法并将async设置为false,则无法从ajax请求中返回任何内容。
更好的想法是始终优先提交您的提交,然后在ajax回调中手动提交表单。