3

我已经尝试了列出文档的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 函数没有触发。

有什么线索吗?

4

1 回答 1

0

jsFiddle Demo

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

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

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

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

if (IsNumeric(field.val())) {

辅助函数

//source: http://stackoverflow.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
于 2013-12-22T11:59:05.130 回答