1

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

我有一个使用 jquery validate 插件进行验证的表单。我有一个自定义验证,它验证您在 text/textarea 字段中是否具有所有有效的 ascii 字符,我们使用 $.validator.addMethod() 功能将其连接到任何具有“ascii”类的字段。

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

我尝试在它返回 true 或 false 之前将清理放入验证方法中,但没有奏效。我尝试将其绑定到 blur 事件,但没有成功。

将它绑定到 keyup 事件是可行的,但我觉得这是一个 hack。我只是想让它做它的事情,并把它与验证联系起来,这样它就知道在检查该字段的有效性之前要进行清理。

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

并尝试将清理“首先”绑定到模糊事件,但这没有用。

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

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

任何帮助,将不胜感激。

4

1 回答 1

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

于 2013-02-19T20:38:09.037 回答