【发布时间】:2013-03-12 21:37:56
【问题描述】:
我正在使用jQuery Validate plugin 通过发出 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"
}
});
}
});
【问题讨论】:
-
虽然重复的问题仍然是 +1 好问题,并且还添加了小提琴中的完整代码,以防小提琴出现故障/死机或链接腐烂。这样,这个问题对将来有类似问题的用户很有用。特别看到 HTML 名称/ID 是问题/解决方案的一部分。
-
@FrançoisWahl:同意,我有点希望我能撤销我的投票,这是一个更简洁的问题,可以更好地说明问题。
-
@AndrewWhitaker:我也投了重复的票,纯粹是因为它是,不管问题的质量如何。因此 +1 因为这是一个很好的问题,解决了一个相当普遍的问题。虽然我更喜欢这个问题,因为它质量更好,但遗憾的是它仍然是重复的。不过,重复的问题不会被删除。据我所知,这只是阻止发布更多答案,仍然使这个问题成为谷歌遇到的优质问题
标签: jquery ajax jquery-validate form-submit