【问题标题】:Validate won't submit form with ajax check [duplicate]验证不会使用 ajax 检查提交表单 [重复]
【发布时间】: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


【解决方案1】:

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

您有一个input 的名称/ID 为submit 的事实导致了问题。我认为这是因为在底层,jQuery validate 调用了form.submit。在您的情况下,form.submit 是一个表单元素,因此它什么也不做。

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

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

【讨论】:

  • 哇,很棒的解决方案。你是怎么找到的?
  • @srchulo:谢谢——我有点幸运……我注意到了提交按钮,并且知道可以通过名称访问表单元素。
  • +1 非常好。无需submit 绑定解决方法。从来不知道 jQuery validate 是这样工作的。
  • 是的,我以前被这个咬过。
猜你喜欢
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 2012-06-29
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多