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();