jQuery验证删除一个字段上的模糊
我有一个ajax函数,其中用户输入的内容和建议显示在下拉列表中。 我的问题是我在使用jQuery验证,当用户单击一个建议时,我会将其作为一个onlur来处理,而et不会得到用户单击的值 我尝试使用以下方法删除一个字段上的onblur函数:jQuery验证删除一个字段上的模糊,jquery,jquery-validate,blur,Jquery,Jquery Validate,Blur,我有一个ajax函数,其中用户输入的内容和建议显示在下拉列表中。 我的问题是我在使用jQuery验证,当用户单击一个建议时,我会将其作为一个onlur来处理,而et不会得到用户单击的值 我尝试使用以下方法删除一个字段上的onblur函数: $('#customerExist').bind('blur',function(){ return true; }); 但这是行不通的。我想在ajax建议之外的所有字段上使用onblur验证 最好的解决方案是对所有字段进行on
$('#customerExist').bind('blur',function(){
return true;
});
但这是行不通的。我想在ajax建议之外的所有字段上使用onblur验证
最好的解决方案是对所有字段进行onblur验证,但如果我所做的验证方法可以节省1秒。在此之前,获取输入字段的值
我知道我可以使用onfocusout:false,
但我会尽量避免
这是验证方法:
jQuery.validator.addMethod("customerExist", function(value, element, param) {
if ( this.optional(element) )
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
param = typeof param == "string" && {url:param} || param;
if ( this.pending[element.name] ) {
return "pending";
}
if ( previous.old === value ) {
return previous.valid;
}
previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
data["customer"] = encodeURIComponent(value);
$.ajax($.extend(true, {
url: www+"validation.jsp",
dataType: "json",
data: data,
success: function(response) {
validator.settings.messages[element.name].remote = "This customer do not exist";//previous.originalMessage;
var valid = response === true;
if ( valid ) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
} else {
var errors = {};
var message = response || validator.defaultMessage( element, "remote" );
errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
return "pending";
}, "");
您可以提供一个函数作为onfocusout参数。 例如,如果要取消对特定元素的验证:
$('#filterForm').validate(
{
onfocusout:function (element) {
if (!$(element).is('.customerExist')) {
if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
this.element(element);
}
}
}
});
如果要进行延迟验证,可以尝试以下操作:
$('#filterForm').validate(
{
onfocusout:function (element) {
var me = this;
var delayedValidation = function() {
me.element(element);
};
if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
if ($(element).is('.customerExist')) {
setTimeout(delayedValidation, 200);
} else {
this.element(element);
}
}
}
});
我建议使用与@Kipriz类似的方法,只是您应该检查元素上的类,而不是直接引用元素
// suppresses on-focusout validation of fields marked 'no-validate-on-focusout'
// validation still occurs on attempting to submit the form
(function() {
var oldonfocusout = $.validator.defaults.onfocusout;
$.validator.setDefaults({
onfocusout: function (element) {
if ($(element).hasClass('no-validate-on-focusout')) {
return;
}
oldonfocusout.call(this, element);
}
});
}())
然后,只需添加类,就可以轻松地使任何元素在模糊上的行为方式相同
<input class="no-validate-on-focusout" type="input" />