jQuery 验证引擎:创建自定义函数时遇到问题

Posted

技术标签:

【中文标题】jQuery 验证引擎:创建自定义函数时遇到问题【英文标题】:jQuery Validation Engine: Trouble Creating a Custom Function 【发布时间】:2013-03-07 05:58:34 【问题描述】:

我已经尝试了列出 documentation 的 custom[function_name]funcCall[methodName] 方法,但我似乎都无法工作.

我的自定义函数如下所示:

function einTest(field, rules, i, options) 
        if (field != null) 
            var x = field.toString();
            if (x.length != 5) 
                return options.allrules.ein.alertText2;
            
        
        else 
            return options.allrules.ein.alertText;
        
    

我在 vaildationEngine-en.js 文件中创建了以下内容:

"ein": 
                "alertText": "Not a number.",
                "alertText2": "Must be a 5 digit number."
    ,

我正在尝试在以下 html 字段中使用它:

<tr>
<td><b>Associate Number (EIN):</b></td>
<td><input type="text" id="EIN" name="EIN" class="validate[required,funcCall[einTest]]" data-prompt-position="inline" /></td>
</tr>

但似乎没有任何效果... einTest 函数没有触发。

有什么线索吗?

【问题讨论】:

【参考方案1】:

jsFiddle Demo

很可能您没有正确公开该功能。该函数需要限定范围才能在全局范围内调用。 “使用第三方函数调用验证字段”documentation,基本上意味着它会寻找与 window 并列的范围。

所以首先要做的是确保你的函数是公开的。

window.einTest = function(field, rules, i, options) 

接下来要记住的是,该字段实际上是包装元素的 jquery 对象。所以为了看起来像它的价值或存在,你应该使用field.val()

if (IsNumeric(field.val())) 

辅助函数

//source: http://***.com/questions/18082/validate-numbers-in-javascript-isnumeric
function IsNumeric(input)

 return (input - 0) == input && (input+'').replace(/^\s+|\s+$/g, "").length > 0;

这是最终结果,

html

<p>Enter text in the input and then focus out to see the validation at work.</p>
<b>Associate Number (EIN):</b><br>
<form>
<input type="text" id="EIN" name="EIN" class="validate[required,funcCall[einTest]]" data-prompt-position="inline" />
</form>

js

window.einTest = function(field, rules, i, options) 
 if (IsNumeric(field.val())) 
  var x = field.val();
  if (x.length != 5) 
   return options.allrules.ein.alertText2;
  
 
 else 
  return options.allrules.ein.alertText;
 
;

function IsNumeric(input)

 return (input - 0) == input && (input+'').replace(/^\s+|\s+$/g, "").length > 0;

//plus library initialization

【讨论】:

以上是关于jQuery 验证引擎:创建自定义函数时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

jquery表单验证 自定义函数使用

jquery.validation自定义正则表达式验证

表单请求验证中的 Laravel“独特”自定义消息验证

搜索时的Jquery select2自定义javascript函数

请问jQuery validate自定义验证规则怎么调用

基于自定义本地化错误消息asp core 3.1创建自定义jquery验证规则