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

在jquery使用addMethod验证之前清理数据,jquery,jquery-validate,Jquery,Jquery Validate,我有一个看似简单的任务,但我很难想出如何去做 我有一个表单正在使用jquery验证插件进行验证。我有一个自定义验证,它验证文本/文本区域字段中是否有所有有效的ascii字符,我们使用$.validator.addMethod()功能将其与类为“ascii”的任何字段挂钩 我的问题是我想保留验证,但我还有一个单独的短javascript函数,用于清除这些垃圾字符。我想在验证抱怨输入字段无效之前对其运行清理 我尝试在验证方法返回true或false之前将清除放入验证方法中,但没有成功。我尝试将它绑定

我有一个看似简单的任务,但我很难想出如何去做

我有一个表单正在使用jquery验证插件进行验证。我有一个自定义验证,它验证文本/文本区域字段中是否有所有有效的ascii字符,我们使用$.validator.addMethod()功能将其与类为“ascii”的任何字段挂钩

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

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

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

我在这里找到了一个名为bindFirst的jquery扩展:

并尝试将清理“第一个”绑定到模糊事件,但没有成功

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

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


任何帮助都将不胜感激。

您只需利用Validate插件的一个内置回调函数即可。如果要使用
onfocusout
,请修改默认的
onfocusout
回调函数

默认值
onfocusout
callback

onfocusout: function( element, event ) {
    if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
         this.element(element);
    }
}
建议用法

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
            }
        }
    });

});
$(文档).ready(函数(){
$('#myform')。验证({//初始化插件
//规则和选项,
onfocusout:函数(元素、事件){
如果(!this.checkable(element)&&(element.name在this.submitted | |!this.optional(element))中){
if(element.name==“yourfield”){
//在name=“yourfield”上执行清理的代码
}

this.element(element);//您只需利用Validate插件的一个内置回调函数。如果要使用
onfocusout
,请修改默认的
onfocusout
回调函数

默认值
onfocusout
callback

onfocusout: function( element, event ) {
    if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
         this.element(element);
    }
}
建议用法

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
            }
        }
    });

});
$(文档).ready(函数(){
$('#myform')。验证({//初始化插件
//规则和选项,
onfocusout:函数(元素、事件){
如果(!this.checkable(element)&&(element.name在this.submitted | |!this.optional(element))中){
if(element.name==“yourfield”){
//在name=“yourfield”上执行清理的代码
}

这个。元素(元素);//就是这样。非常感谢!就是这样。非常感谢!