我正在使用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"
}
});
}
});