我正在使用来自remote method的jQuery validation plugin进行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。但是,输入姓名和有效的电子邮件将提交表单,尽管错误&#34;电子邮件已经存在&#34;显示。
答案 0 :(得分:0)
以下小提琴是否按预期工作? 您可以将网址更改为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