向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标记示例。