我的应用程序中有一个表单,我正在使用 jQuery 表单验证插件进行验证。规则之一是远程类型,以验证用户名不存在。我已经能够覆盖 onkeyup 事件,因此规则不会针对我输入的每个字母发送到服务器。我完成它的方式如下:
var validator = $("#frmSite").validate({
onkeyup: function(element) {
var element_name = jQuery(element).attr('name');
if (this.settings.rules[element_name] != undefined) {
if (this.settings.rules[element_name].onkeyup !== false) {
jQuery.validator.defaults.onkeyup.apply(this, arguments);
}
}
},
rules: {
<%=txtUsername.UniqueID%>: {
onkeyup: false,
required: true,
minlength: 6,
remote: function () {
var params = {
userName: userNameTextbox.val()
};
return {
type: "POST",
url: "services/security.asmx/UserNotExists",
data: JSON.stringify(params),
contentType: "application/json; charset=utf-8",
dataType: "json",
dataFilter: function (data) {
var msg = eval("(" + data + ")");
if (msg.hasOwnProperty("d"))
return JSON.stringify(msg.d);
else
return msg;
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
}
};
}
}
}
});
我遇到的问题是,现在远程规则是在onfocusout
事件上触发的,每当我点击页面中的其他内容(例如,注销按钮)时,规则就会触发。我已经添加了onsubmit: false,
作为validate
函数选项的一部分和一个处理提交按钮的单击事件的函数,但即使这样,规则也会继续在onfocusout
. 为了控制这一点,我添加了一个类似于我为 设置的功能,onkeyup
因此规则不会在任何一个上触发onfocusout
,但是用户获得验证消息的唯一时刻是在单击提交按钮之后。但是,我希望能够尽快将错误通知用户(即,一旦他完成输入用户名)。有没有办法执行以下任何或所有操作:
- 要为 onkeyup 添加延迟,以便在用户停止输入用户名几秒钟后触发规则?这应该只影响用户名文本框,因为我不希望延迟影响表单中的其他输入。
1a。如果以上是可能的,可以设置一种只影响remote
规则的方式吗?因此,在正常键入期间会触发required
和maxlength
验证,但只有remote
一个是在用户停止输入几秒钟后?
- 使
onkeyup
事件仅针对required
andmaxlength
规则触发,而不针对 theremote
one?所以remote
规则只有在用户点击提交时才会触发,而其他两个是正常触发的keyup
如果还有其他可能的出路,请提出建议。
谢谢。