1

我有一个接受用户数字输入的表单。表单提交时,调用一个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 元素的集合。因此,此函数绑定到表单提交单击事件并在提交时运行。

问题:这不起作用。显示警报并立即刷新浏览器页面(提交表单),而无需用户先单击“确定”按钮。

还有其他方法可以实现吗?

4

1 回答 1

2

首先,当您在 jQuery 中使用选择器时,结果永远不会为 null 或未定义,因此您可以这样做:

$('myitems').each(function()....

其次,您必须意识到您正在进行异步调用 (AJAX),这意味着该函数CheckForm甚至可能在其中一个get调用完成之前返回。

于 2012-04-28T19:55:46.703 回答