向jQuery验证器自定义方法添加延迟

向jQuery验证器自定义方法添加延迟,jquery,jquery-mobile,jquery-validate,Jquery,Jquery Mobile,Jquery Validate,这将确切地说明正在发生什么。组装花了一段时间,但我从一开始就应该做一些事情 我正在使用 我使用的是内联验证,因此当用户从一个输入转到另一个输入时,输入会被验证。这是我希望尽可能维护的功能 $form.validate({ 'rules': { 'myInput': { 'required': true, 'myCustomMethod': true } }, 'onkeyup': false, 'onfocusou

这将确切地说明正在发生什么。组装花了一段时间,但我从一开始就应该做一些事情

我正在使用

我使用的是内联验证,因此当用户从一个输入转到另一个输入时,输入会被验证。这是我希望尽可能维护的功能

$form.validate({
'rules': {
    'myInput': {
        'required': true,
        'myCustomMethod': true
         }
    },
    'onkeyup': false,
    'onfocusout': function(element) {
        if ($element.attr('id') === 'myInput')
        {
           setTimeout(function() {
             // Just need a way for the input's value to get updated first
             // call my custom method
            }, 1000);
        }
    },
    'submitHandler': function(form) {
        form.submit();
    }
});
...

$.validator.addMethod('myCustomMethod', function(value, element) {
    // myobject is stored values to validate against.
    $.each(myobject, function(i, thing) {
        if (value === thing)
        {
            return true;
        }
        else
        {
            return false;
        }
    });
 }, Messages.inValidInputValue);
myInput的值必须与自动完成列表中的值匹配。如果没有,则应认为输入无效

当myInput元素的模糊事件触发时,将触发myCustomMethod。问题是,我将离开该字段以选择由自动完成创建的选项。我正在努力寻找一种验证onfocusout的方法,但只有在我从列表中选择了一些内容之后

模糊事件和单击/触摸事件同时发生。这是预期的功能。但是,模糊事件首先触发,因此当我尝试单击/触摸自动完成列表中的某个选项时,我得到一个错误,即myInput无效。这是真的-但我正在尝试选择一个有效的值

我在上面更新了我的代码-有一个超时来帮助显示…我正在尝试做什么。就像我需要启动模糊事件,然后等待我单击列表中的某个项目,然后进行验证

但是,用户可能无法从列表中选择选项。在这种情况下,输入应被视为无效,这就是我需要模糊事件的原因


我读到我可以返回挂起,但我总是得到与返回真相同的响应。也许我没有把它正确地结合起来。谢谢你的建议

不完全确定你在问什么,但下面可能有用

1对一个字段或整个表单禁用onfocusout。我不确定你需要什么,因为我看不到你剩下的代码。这里的想法是阻止正常事件触发字段上的验证。也许您还需要禁用onkeyup验证

2然后,当您准备验证此特定字段时,您可以使用.valid方法自己触发它。$'myField'.valid将仅触发此字段的验证,并返回通过/失败的布尔指示

请注意,所有规则的应用都是相同的,您仍然需要调用.validate方法来初始化表单上的插件

编辑:

根据OP的编辑:

onfocusout: function(element) {
    if ($element.attr('id') === 'myInput') {
       setTimeout(function() {
            this.element(element);  // trigger validation after the delay
        }, 1000);
    } else if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
        this.element(element);  // otherwise, trigger validation normally
    }
},

本质上,我的文本输入的值必须是自动完成列表中列出的值之一。因此,当用户单击列表中的某个值时,将触发模糊事件-这将返回一个错误,因为输入值与列表中的值不匹配。一切都正常运转——运转有点太好了@dragonslovetacos,那么请在您的OP中更好地解释并构建一个更完整的问题示例。因此,您缺少实际触发验证的onfocusout函数部分。请参阅插件中的默认onfocusout函数。这将触发验证:This.elementelement在延迟后运行该行。您使用的是哪个JQM版本?请添加一个html标记示例。