【问题标题】:JQuery Validation Plugin: Use remote with delayJQuery Validation Plugin:延迟使用远程
【发布时间】:2016-10-21 17:56:51
【问题描述】:

我正在使用来自jQuery validation pluginremote method 进行ajax 调用。每次在输入字段中按下一个键,就会激活远程功能。我想添加一个延迟,以便仅在用户停止按键几毫秒时触发 ajax 请求。

这个问题是在 2012 年 at GitHub 提出的,但在 2015 年被开发者关闭:

对于在此问题上缺乏活动,我深表歉意。而不是离开 它不再打开,我决定关闭旧问题而不尝试 解决他们,以不再给人以它会得到的错误印象 最终得到解决。

在讨论区,用户lohfu提出了如下解决方案:

$.validator.methods._remote = $.validator.methods.remote;

var timer = 0;
$.validator.methods.remote = function () {
    clearTimeout(timer);

    var args = arguments;

    timer = setTimeout(function() {
        $.validator.methods._remote.apply(this, args);
    }.bind(this), 500);

    return "pending";
};

但是,有两个主要问题:

  1. 它不起作用。如果我添加延迟并且远程函数返回 false,则表单仍会提交。

  2. 当我在输入字段中输入导致远程功能出错的内容时,它会正确分配class="error"。如果我现在选择不同的输入,class="error" 会切换到class="valid",尽管错误消息仍然存在并且错误消息仍然显示。当我按下提交时也会发生同样的情况。


这是一个最小的例子:

HTML

<form action="test.php" method= "POST" id="form">
    Name:  <input type="text" name="name"><br>
    Email:  <input type="email" name="email"><br>
    <input type="submit">
</form>

JS

    $("#form").validate({
     rules: {
       name: "required",
       email: {
         required: true,
         email: true,
         remote: {
           url: "ajax.php",
           type: "post"
         }
       }
     },
     messages: {
       email: {
         remote: "Email already exists"
       }
     }
   });

ajax.php

<?php
header('Content-Type: application/json');

$valid = null;

echo json_encode($valid);

永远不要提交这个表单,因为 ajax.php 总是返回 false。但是,输入名称和有效的电子邮件将提交表单,尽管会显示错误“电子邮件已存在”。

【问题讨论】:

  • 您可以尝试使用字符串 'false',而不是使用字符串 'null' 来响应?
  • @Dr.Flink 如果我将返回字符串 'false' 而不是 null,那么它将用作默认错误消息。所以我收到错误消息“false”而不是“Email areay exists”。

标签: php jquery ajax validation


【解决方案1】:

以下小提琴是否按预期工作? 您可以将 url 更改为 true 或 false:

url: '/echo/js/?js=[null|true|false]',

https://jsfiddle.net/ww0zh9jm/2/

..您必须添加外部资源(Fiddle 删除它们): https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js https://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/jquery.validate.min.js

【讨论】:

  • 这对我不起作用。如果我在“名称”字段中输入内容并在字段电子邮件中输入有效的电子邮件,那么我可以提交表单,即使我看到错误消息“电子邮件已存在”。顺便说一句:我不需要包含外部资源,它们被正确保存为外部+您不需要将 jquery 包含为外部源,您可以单击 javascript 按钮并在那里选择 jquery。
  • 这真的很尴尬。当我发布它时它肯定对我有用,但现在它完全坏了(有时验证器似乎甚至没有注册)。你必须使用这个特定的验证插件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多