2013-06-05 193 views
3

我在jQuery中使用驗證插件。有一個很奇怪的是,當我以這種方式添加規則時jquery驗證添加規則

$(document).ready(function() { 
$.validator.addMethod("endDateGreaterThan", function (value, element, params) { 
      if (value != "" && $(params).val() != "") { 
       var endDate = formatValidateDate(value); 
       var startDate = formatValidateDate($(params).val()); 
       if (startDate == null || endDate == null) 
        return true; 
       return new Date(endDate) >= new Date(startDate); 
      } 
      return true; 
     }, ""); 

var validator = $("#form").validate({ 
      rules: { 
       StartDate: "required", 
       EndDate: { 
        required: true, 
        endDateGreaterThan: "#StartDate" 
       },     
       DiscountRate: { 
        required: true, 
        max: 100, 
        min: 1 
       } 
      }, 
      messages: { 
       StartDate: { 
        required: "ErrorMessageStartDateRequired" 
       }, 
       EndDate: { 
        required: "ErrorMessageEndDateRequired", 
        endDateGreaterThan: "ErrorMessageEndDateGreaterThanStartDate" 
       }, 
       DiscountRate: { 
        required: "ErrorMessageDiscountRateRequired", 
        max: "Global.ErrorMessageDiscountRateRange", 
        min: "Global.ErrorMessageDiscountRateRange" 
       } 
      } 
     }); 

沒有添加任何規則。如果我調試js文件並進入jquery.validation.js文件中的validate方法,我發現傳遞給validate方法的選項是空的。

但如果我動態添加規則,就像

$("#StartDate").rules("add", { 
      required: true, 
      messages: { 
       required: "StartDate is required" 
      } 
     }); 

的規則將被添加只是因爲它應該是什麼。

我正在使用ASP.net mvc。

任何建議表示感謝。

+1

顯示'form'的呈現HTML。在第一種情況下,當在'.validate()'中定義'rules'時,必須使用'name'屬性作爲選擇器。在你的第二種情況下,使用'rules('add')'方法,你通過'id'屬性來定位你的字段。看到不同?如果我們可以看到表單的HTML,你的'規則'選擇器是否匹配字段'name'屬性? – Sparky

回答

0

這是我的例子是工作的罰款:

$("#formControl").validate({ 
     rules: { 
      ElementTypeUid: "required", 
      InternalIdentifier: "required" 
     }, 
     messages: { 
      ElementTypeUid: "Some error message", 
      InternalIdentifier: "Some error message" 
     } 
    }); 
1

機會是你的HTML是錯誤的。您在驗證代碼中引用的每個輸入都必須具有name屬性。因此,這是錯誤的:

<input type="text" id="StartDate" /> 

這是正確的:

<input type="text" name="StartDate" id="StartDate" /> 

documentation

name屬性是 ' '需要' '' 輸入元素' 時, 沒有它,驗證插件就無法正常工作。通常名稱和編號 屬性應該具有相同的值。

+0

這是真的,但只有在OP顯示其呈現的HTML之前纔有真正的猜測。 – Sparky

+0

確實,@Sparky - 對我來說似乎是唯一可能的答案,無論看到HTML ...我同意這個問題可以改進! – Ryley