3

我都試過了定製[函數名]funcCall [方法名]方法所列的documentation,我似乎無法得到任何工作。jQuery驗證引擎:故障創建一個自定義功能

我的自定義功能如下:

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函數沒有觸發。

任何線索?

回答

0

jsFiddle Demo

極有可能你沒有正確地暴露出功能更多。該函數的範圍需要在全局範圍內調用。 「使用第三方函數調用來驗證字段」documentation,基本上,這意味着它將查找與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