Jquery表单检查返回true,但需要返回false

我在提交表单时运行此表单检查:

if((formData[4].value == 1 || formData[4].value == 2) && !formData[2].value) { alert('Please fill out the key field'); return false; } else { $.ajax({ url: "/ajax/key_check.php", cache: false, data: "key=" + formData[4].value, dataType: "html", success: function(data) { if(data == 1) { alert('Key already exists'); return false; } } }); return true; } 

该脚本有效,如果数据== 1,则警报密钥已存在,但表单仍然提交。 我想通过返回false,如果data == 1会阻止表单处理,但是它会继续并且仍然添加密钥并弹出密钥已存在的消息。 如果数据== 1,如何停止提交表单? 我甚至试过这样做:

 if(data == 1) { alert('Key already exists'); return false; } else { return true; } 

然后删除脚本底部的返回true,但同样的问题发生了。 弹出窗口出现但表单仍然处理完毕。

回调中的返回该回调返回,而不是您想要的父函数…但是您可以获得所需的效果,如下所示:

 if((formData[4].value == 1 || formData[4].value == 2) && !formData[2].value) { alert('Please fill out the key field'); return false; } else { $.ajax({ url: "/ajax/key_check.php", cache: false, data: "key=" + formData[4].value, dataType: "html", success: function(data) { if(data == 1) { alert('Key already exists'); } else { $("#someForm")[0].submit(); } } }); return false; } 

这样做永远不会直接提交,但如果检查没问题,则调用* native .submit()方法 ,提交表单,不再运行此处理程序。

问题是AJAX请求是异步发生的 – 它在外部函数返回true 调用你的成功函数。 返回false是成功函数(不是你的外部函数),它与表单是否提交无关。

您必须始终从该外部函数返回false,然后在AJAX成功函数中,如果validation成功,则取消绑定初始提交处理程序并使用表单的.submit()方法正常提交表单:

(在这些代码示例中,我假设form是一个jQuery对象,它包装了表单的底层DOM元素。)

 success: function(data) { if(data == 1) { alert('Key already exists'); } else { form.unbind('submit'); // Prevent the AJAX validation from happening again form.submit(); // Submit the form normally } } 

或者,您可以调用浏览器的本机form.submit()方法,并且不需要“unbind”行:

 form[0].submit();