我有一个看起来很简单的任务,但我无法弄清楚如何去做。
我有一个使用jquery validate插件验证的表单。我有一个自定义验证,它验证你在text / textarea字段中有所有有效的ascii字符,然后我们使用$ .validator.addMethod()函数将它挂钩到类“ascii”的任何字段。
我的问题是我想保留验证,但我也有一个单独的短javascript函数来清理那些垃圾字符。我想在验证之前在输入字段上运行清理,告知它无效。
我尝试将清理放入验证方法,然后返回true或false,这不起作用。我尝试将它绑定到模糊事件,这不起作用。
将它绑定到keyup事件有效,但我觉得这是一个hack。我只是希望它能够做到这一点,并将该事情与验证联系起来,以便它在检查该字段的有效性之前知道要清理。
我在这里找到了一个名为bindFirst的jquery扩展:How to order events bound with jQuery
并尝试将清理“第一次”绑定到模糊事件,但这不起作用。
我想我可以使用“依赖”功能来提取我需要的内容,但在使用自定义验证时似乎不是一个选项。
在我提到的所有场景中......它确实执行了清理工作,但直到它已经抱怨该字段无效为止。只需返回该字段并退回即可删除错误消息。
任何帮助都将不胜感激。
答案 0 :(得分:1)
您只需要利用Validate插件的内置回调函数之一。如果您要使用onfocusout
,请修改默认的onfocusout
回调函数。
默认onfocusout
回拨:
onfocusout: function( element, event ) {
if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
this.element(element);
}
}
建议用法:
请注意如何保留核心功能,以免干扰其他字段。
$(document).ready(function () {
$('#myform').validate({ // initialize the plugin
// rules & options,
onfocusout: function (element, event) {
if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
if (element.name == "yourfield") {
// your code to do cleanup on name="yourfield"
}
this.element(element); // <-- this triggers validation on the field
}
}
});
});
工作演示:http://jsfiddle.net/WTjTy/
在指定input
字段的模糊之前,演示将在显示任何错误之前触发模拟“清理”。