2010-10-07 198 views
0

我使用jQuery validation plugin在客戶端驗證我的表單。我爲每個具有正則表達式(自定義)屬性的HTML控件添加一個使用addMethod函數的新方法。我的HTML控件看起來像。jQuery驗證插件

<input type="text" id="txtInf" name="txtInf" regex="some regular exp" error="check your inf"></input> 

$("*[regex]").each(function() { 
        var controlId = $(this).attr('name');  
        var regex = new RegExp((this).attr('regex'));  
        var error = $(this).attr('error');  

      $.validator.addMethod(controlId, function (value, element) { 

       return this.optional(element) || false; 

      }, error); 

      $(this).rules("add", { '" + controlId + "': "^[a-zA-Z'.\s]{1,40}$" }); 

      $(this).validate(); 
     }); 

在這裏,我給方法的名稱控件ID這是txtInf。在下面的行中,我需要給txtInf,但我想使用controlId變量,因爲我想使這個函數成爲一個通用的函數。但是,如果我直接寫入controlId,它將使用相同的方法搜索方法。但實際上添加的方法是txtInf。所以我需要通過使用controlId變量來推廣這條線。

$(this).rules("add", {txtInf: "^[a-zA-Z'.\s]{1,40}$" }); 

回答

0

問題是,您不能在對象文本中使用變量名稱進行引用。當我需要做這樣的事時,我過去所做的是手動創建JSON字符串並通過parseJSON傳遞它。這看起來像這樣:

$(this).rules("add", $.parseJSON('{"' + controlId + '":"^[a-zA-Z\'.\s]{1,40}$" }');