2013-02-19 64 views
1

我有什么似乎是一个简单的任务,但我无法弄清楚如何去做。清理jQuery之前的数据用addMethod验证

我有一个表单验证与jQuery验证插件。我有一个自定义验证,用于验证您在text/textarea字段中具有所有有效的ascii字符,并且使用$ .validator.addMethod()功能将它与类“ascii”绑定到任何字段。

我的问题是,我想保持验证,但我也有一个单独的简短的JavaScript函数清理那些垃圾字符。我想在验证输入框中运行清理,并认为它是无效的。

我试图把清理放入验证方法之前,它返回true或false,没有工作。我尝试将它绑定到模糊事件,这没有奏效。

将它绑定到keyup事件工程,但我觉得这是一个黑客攻击。我只是想让它做到这一点,并将其与验证绑定在一起,以便在验证该字段的有效性之前知道要进行清理。

我发现一个jQuery的扩展名为bindFirst这里:How to order events bound with jQuery

,并试图结合清理“第一”的模糊事件,但没有奏效。

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

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

任何帮助,将不胜感激。

+0

显示密码... – Sparky 2013-02-19 20:25:43

回答

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场的模糊。

+0

这样做。非常感谢! – MoDiggity 2013-02-19 21:19:15