【发布时间】:2016-10-21 17:56:51
【问题描述】:
我正在使用来自jQuery validation plugin 的remote 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";
};
但是,有两个主要问题:
它不起作用。如果我添加延迟并且远程函数返回 false,则表单仍会提交。
当我在输入字段中输入导致远程功能出错的内容时,它会正确分配
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