Here is a JSFiddle 将准确显示正在发生的事情。组装需要一段时间,但我从一开始就应该做些什么。
我正在使用jQuery mobile to create an autocomplete list。
我正在使用内联验证,因此当用户从一个输入转到另一个输入时,输入将被验证。如果可能,这是我想要维护的功能。
$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
的值必须与自动填充列表中的值匹配。如果没有,则输入应视为无效。
当blur
元素的myInput
事件,myCustomMethod
被解雇时。问题是,我将离开该字段以选择由自动完成创建的选项。我很难找到验证onfocusout
的方法,但只有在我从列表中选择了一些内容之后。
blur
事件和click/touch
事件发生在同一时间。其中,是预期的功能。但是,blur
事件首先触发,因此当我尝试单击/触摸自动完成列表中的选项时,出现myInput
无效的错误。这是真的 - 但我试图选择一个有效的值...
我更新了上面的代码 - 超时帮助显示...我正在尝试做的事情。这就像我需要启动模糊事件,然后等待我点击列表中的项目,然后验证。
但是,用户可能无法从列表中选择一个选项。在这种情况下,输入应被视为无效(这就是我需要模糊事件的原因)。
我已经阅读了return "pending"
但我总是得到与return true
相同的回复。也许我没有正确地加入它。谢谢你的任何建议!
答案 0 :(得分:0)
不完全确定您要求的内容,但以下内容可能有效。
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
}
},