在jquery之前清理数据使用addMethod进行验证

时间:2013-02-19 19:58:33

标签: jquery jquery-validate

我有一个看起来很简单的任务,但我无法弄清楚如何去做。

我有一个使用jquery validate插件验证的表单。我有一个自定义验证,它验证你在text / textarea字段中有所有有效的ascii字符,然后我们使用$ .validator.addMethod()函数将它挂钩到类“ascii”的任何字段。

我的问题是我想保留验证,但我也有一个单独的短javascript函数来清理那些垃圾字符。我想在验证之前在输入字段上运行清理,告知它无效。

我尝试将清理放入验证方法,然后返回true或false,这不起作用。我尝试将它绑定到模糊事件,这不起作用。

将它绑定到keyup事件有效,但我觉得这是一个hack。我只是希望它能够做到这一点,并将该事情与验证联系起来,以便它在检查该字段的有效性之前知道要清理。

我在这里找到了一个名为bindFirst的jquery扩展:How to order events bound with jQuery

并尝试将清理“第一次”绑定到模糊事件,但这不起作用。

我想我可以使用“依赖”功能来提取我需要的内容,但在使用自定义验证时似乎不是一个选项。

在我提到的所有场景中......它确实执行了清理工作,但直到它已经抱怨该字段无效为止。只需返回该字段并退回即可删除错误消息。

任何帮助都将不胜感激。

1 个答案:

答案 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字段的模糊之前,演示将在显示任何错误之前触发模拟“清理”。