我有一个接受用户输入数字的表单。在表单提交时,调用JS函数来检查表单状态(如果参数正常,等等)。其中一个操作是根据其参数(从表单中读取)启动AJAX请求以接收两个值。所以,我有一个名为CheckForm()的函数,它在表单提交时运行,在其中,我有一个启动AJAX请求的块:
var error = 0;
function CheckForm() { // run on form submit
var items = $('myitems');
if (items != undefined || items != null) {
items.each(function() {
if (!isNaN($(this).val())) { // check for number
$.get('myurl', {
// parameters
},
function(data) {
if (data != "0") {
if (condition) error = 1;
}
});
}
if (error == 1) return false;
}); // end each function
if (error == 1) {
alert("You have made an error.");
error = 0;
return false;
}
}
return true;
}
我还声明了一个全局变量(错误)来检查检查期间是否发生了错误。 myitems是检查运行的html元素的集合。因此,此函数绑定到表单提交点击事件,并在提交时运行。
问题:这不起作用。显示警报并立即刷新浏览器页面(提交表单),而无需用户首先单击“确定”按钮。
还有其他方法可以实现吗?
答案 0 :(得分:2)
首先,当你在jQuery中使用选择器时,结果将永远不会为null或未定义,所以你可以这样做:
$('myitems').each(function()....
其次,您必须意识到正在进行异步调用(AJAX),这意味着即使其中一个CheckForm
调用完成,函数get
也可能会返回。 / p>