添加延迟到jQuery Validator自定义方法
这是一个JSFiddle ,它将准确显示正在发生的事情。 组装需要一段时间,但我从一开始就应该做些什么。
我正在使用jQuery mobile创建自动完成列表 。
我正在使用内联validation,因此当用户从一个输入转到另一个输入时,输入将被validation。 如果可能,这是我想要维护的function。
$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
元素的blur
事件时, myCustomMethod
被触发。 问题是,我将离开该字段以选择由自动完成创建的选项。 我正在努力寻找一种方法来validationonfocusout
,但只有在我从列表中选择了一些内容之后。
blur
事件和click/touch
事件在同一时间发生。 哪个,是预期的function。 但是, blur
事件首先触发,因此当我尝试单击/触摸自动完成列表中的选项时,我收到myInput
无效的错误。 这是真的 – 但我正在尝试选择一个有效的值…
我更新了上面的代码 – 超时帮助显示……我正在尝试做的事情。 这就像我需要启动模糊事件,然后等待我点击列表中的项目,然后validation。
但是,用户可能无法从列表中选择一个选项。 在这种情况下,输入应被视为无效(这就是我需要模糊事件的原因)。
我已经读过我可以return "pending"
但我总是得到相同的响应,因为return true
。 也许我没有正确地加入它。 谢谢你的任何建议!
不完全确定你要问的是什么,但以下可能有用。
1)禁用一个字段或整个表单的onfocusout
。 不知道你需要什么,因为我看不到你的其余代码。 这里的想法是阻止正常事件触发你的领域validation。 (也许你还需要禁用onkeyup
validation?)
2)然后,当您准备好validation此特定字段时,您可以使用.valid()
方法.valid()
触发它。 $('#myField').valid()
将仅触发此一个字段的validation并返回通过/失败的布尔指示。
请注意,所有规则都应用相同,您仍然需要调用.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 } },