6

我正在使用jQuery Validate 插件通过发出 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 请求以确保电子邮件未被接收,然后即使电子邮件验证正常,它也不会提交。您必须再点击一次提交,然后它将提交。有人知道为什么是这样吗?

我已经设置了一个jsfiddle 来演示这个问题。如果您使用 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>

完整脚本:

$(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"
            }
        });
    }
});
4

1 回答 1

5

好吧,这个有点奇怪,所以请耐心等待。

input您拥有名称/ ID的事实submit导致了问题。我认为这是因为在后台,jQuery validate 正在调用form.submit. 在你的情况下,form.submit是一个表单元素,所以这什么都不做。

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

示例:http: //jsfiddle.net/42TK4/7/

于 2013-03-12T22:06:34.593 回答