Jquery 验证韩元';t使用ajax检查提交表单

Jquery 验证韩元';t使用ajax检查提交表单,jquery,ajax,jquery-validate,form-submit,Jquery,Ajax,Jquery Validate,Form Submit,我正在使用验证表单中的电子邮件字段,方法是发出ajax请求以确保电子邮件未被其他用户接收。为此,我添加了如下规则: //make sure email field is on form before adding rule if ($(".unique_email").is("*")) { //remote validation $(".unique_email").rules("add", { remote: "http://test.nethop.com/te

我正在使用验证表单中的电子邮件字段,方法是发出ajax请求以确保电子邮件未被其他用户接收。为此,我添加了如下规则:

//make sure email field is on form before adding rule
if ($(".unique_email").is("*")) {
    //remote validation
    $(".unique_email").rules("add", {
        remote: "http://test.nethop.com/test.cgi",
        messages: {
            remote: "This email is already in use"
        }
    });
}
但是,每当我在表单上点击“提交”时,它都会首先执行ajax请求以确保电子邮件没有被接收,然后即使电子邮件验证为正常,它也不会提交。您必须再次点击提交,然后它将提交。有人知道这是为什么吗

我已经设置了一个演示该问题的程序。如果您使用chrome开发者工具或firebug,您可以看到ajax请求正在发出,返回
true
,但仍然没有提交

HTML

<form id="listing" method="post">
    <ul>
        <li>
            <label for="username">Email *</label>
            <input type="text" name="username" id="username" autocomplete="off"
            class="email required unique_email" value="test@test.com" />
        </li>
        <li>
            <input type="submit" name="submit" id="submit" class="btn" value="Save"
            />
        </li>
    </ul>
</form>

好吧,这个有点奇怪,所以请容忍我

您有一个名为/id
submit
input
,这是导致问题的原因。我认为这是因为在幕后,jqueryvalidate正在调用
form.submit
。在您的例子中,
form.submit
是一个表单元素,因此它不起任何作用

如果重命名
submit
按钮,一切正常


示例:

哇,很好的解决方案。你怎么查到的?@srchulo:谢谢——我有点幸运。。。我注意到提交按钮,知道表单元素可以通过名称访问。+1非常好。无需
提交
绑定解决方案。从来都不知道jQuery validate是这样工作的。是的,我以前也被这个问题困扰过。虽然仍然是一个重复的+1表示好问题,并且还添加了完整的fiddle代码,以防fiddle崩溃/死亡或链接崩溃。这样,这个问题对将来有类似问题的用户很有用。特别是看到HTML名称/ID是问题/解决方案的一部分。@FrançoisWahl:同意,我有点希望取消我的投票,这是一个更简洁的问题,可以更好地说明问题。@Andrewhitaker:我也投票赞成重复,纯粹是因为它是,不管问题的质量如何。因此+1是一个很好的问题,它解决了一个非常常见的问题。虽然我更喜欢这个问题,因为它的质量更好,但遗憾的是,它仍然是重复的。但重复的问题不会被删除。据我所知,这仅仅是为了阻止更多的答案被发布,仍然使这个问题成为谷歌提出的高质量问题
$(document).ready(function () {
    var validator = $("form").validate({
        onkeyup: false,
        onblur: true,
    });

    if ($(".unique_email").is("*")) {
        //remote validation
        $(".unique_email").rules("add", {
            remote: "http://test.nethop.com/test.cgi",
            messages: {
                remote: "This email is already in use"
            }
        });
    }
});