jQuery 验证消除一个字段上的模糊

标签 jquery jquery-validate blur

我有一个ajax函数,用户输入一些内容并在下拉列表中显示建议。 我的问题是我正在使用 jQuery 验证,当用户单击建议时,将其作为 onlur 处理,并且 et 无法获取用户单击的值。

我尝试使用以下方法删除一个字段上的 onblur 函数:

$('#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);
                }
            }
        }
    });

关于jQuery 验证消除一个字段上的模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430727/

相关文章:

javascript - 使用jQuery在滚动条上从右向左滑动元素

javascript - 运行 jquery 媒体查询而不重新加载

javascript - 填充隐藏的表单输入 onClick

jquery - jQuery 验证后的自定义提交功能

使用 ajax 调用进行 jquery 验证

java - 如何为图像模糊设置动画?

javascript - jQuery - .on ('click' ... ) 在处理动态创建的元素时不适用于现有元素

jquery - 在文本框上手动设置不显眼的验证错误

css - 如何跨浏览器模糊图像?

css - CSS 中的整页模糊