我有这段代码用于验证表单:
$("form[name='aar_form']").submit(function()
{
var values = new Array();
$(".tipsy").remove();
show_loading();
for(var i in fields)
{
if(i < 9)
{
values[i] = $("input[name='" + fields[i] + "']").val();
}
else if(i < 10)
{
values[i] = $("select[name='" + fields[i] + "']").val();
}
else
{
var $i = $("#" + fields[i] + "_div input:checked");
if($i.length < 1)
{
values[i] = "";
}
else if($i.length == 1)
{
values[i] = $i.val();
}
else
{
values[i] = new Array();
$i.each(function()
{
values[i].push($(this).val());
});
}
}
}
window.no_errors = false;
ajax_request({act: "aar_validate", values: values}, function(response)
{
response = eval("(" + response + ")");
window.no_errors = response.errors === true ? false : true;
if(response.errors === true)
{
for(var i in response.error_fields)
{
$(response.error_selector[i] + "[name='" + response.error_fields[i] + "']").attr("title", response.error_msgs[i]).tipsy({trigger: "manual", gravity: response.error_gravity[i]}).tipsy("show");
}
hide_loading();
$("html, body").animate({scrollTop: $(response.error_selector[0] + "[name='" + response.error_fields[0] + "']").offset().top - 80}, "slow");
}
});
console.log(window.no_errors);
setTimeout("console.log('k: ' + window.no_errors)", 100);
return false;
});
后端的PHP脚本执行所有验证。发生的问题是window.no_errors变量更新得太晚。现在,我对控制台的第一个日志给出了错误(因为它默认情况下就是这样),但是第二个用超时100毫秒设置的日志返回true,应该如此。如果我写它喜欢这个:
setTimeout("return window.no_errors", 100);
无论no_errors变量是什么,表单都会提交。
任何提示?
答案 0 :(得分:0)
如果您在验证期间不想在页面上执行任何其他操作,请同步调用验证页面而不是默认的异步调用