2013-06-05 156 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