2011-10-19 30 views
2

我想爲我的日期時間字段創建一個自定義的驗證方法,於是我跟着例子在這裏:Jquery validate date range fails這裏:Validate that end date is greater than start date with jQuery定製jQuery驗證方法從來沒有發射

以下是我的表(MVC 3剃鬚刀部分視圖):

@using (Html.BeginForm("CreateFood", "Stock", FormMethod.Post, new { id = "formData" })) 
{ 
     @Html.ValidationSummary(false, "Opps. Please correct the mistakes") 
     <div class="editor-label"> 
      Storage Date 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.StorageDate, new { @class = "storedate" }) 
      @Html.ValidationMessageFor(model => model.StorageDate) 
     </div> 

     <div class="editor-label"> 
      Expiry Date 
     </div> 
     <div class="editor-field"> 
     @Html.EditorFor(model => model.ExpiryDate, new { @class = "expirydate" }) 
     @Html.ValidationMessageFor(model => model.ExpiryDate) 
     </div> 
} 

和腳本:

jQuery.validator.addMethod("dateRange", function() { 
     var date1 = new Date(jQuery(".expirydate").val()); 
     alert(date1); 
     var date2 = new Date(jQuery(".storedate").val()); 
     alert(date2); 
     alert(date1 < date2); 
     return (date1 < date2); 
    }, "Please check your dates. The start date must be before the end date."); 

$createdialog.dialog("option", "buttons", { 
     "Cancel": function() { 
      $createdialog.dialog('close'); 
     }, 
     "Submit": function() { 

      // Validate the form before ask for cabinet 
      var frm = $('#formData'); 

      var validator = frm.validate({ 
       rules: { 
        "ExpiryDate": { dateRange: true } 
       } 
      }); 
      if (frm.valid()) { 
       submitForm(); 
      } 

問:

  1. 我對語法不太確定,我應該在「ExpiryDate」中放置什麼(它是一個選擇器?或者是表單字段名稱? ): VAR驗證= frm.validate({ 規則:{ 「ExpiryDate」:{日期範圍:真正}}

  2. 所有警報()的方法犯規表演,所以我假設的方法是永遠火..任何想法?

(PS:我使用的日期選擇爲特定的格式,以及兩個日期字段:

$('.storedate').datepicker({ dateFormat: 'D, dd M yy' }); 
    $('.expirydate').datepicker({ dateFormat: 'D, dd M yy' }); 

真正需要幫助這裏...爲幾天已經在尋找方法,只是實現的日期時間的驗證......

欣賞任何反饋...謝謝... });

回答

0

首先,我會建議你在圖書館http://momentjs.com/處理日期和驗證。

在我的情況下,自定義規則驗證沒有被解僱,因爲.NET MVC自動配置表單驗證。所以我必須在應用我之前刪除該配置(以便能夠使用自定義Kendo UI方法,...),然後全部正常工作。

這裏有Javascript代碼示例:

var errorPlaceholder = $("<div></div>"); 

function initializeFormValidator() { 
    jQuery.validator.addMethod("year", function(value, element, options) { 
     return (new Date().getFullYear()) >= parseInt(value, 10); 
    }); 

    jQuery.validator.addMethod("greater20", function(value, element, options) { 
     return (($(element).data("kendoDropDownList").value() == "1") && (parseFloat($(options).val()) >= 20.0)); 
    }); 

    $.data($("#myFormId")[ 0 ], "validator", null); //Remove previous configuration 
    $("#myFormId").validate({ 
     focusInvalid: true, 
     ignore: "", 
     onkeyup: false, 
     onfocusout: false, 
     errorElement: "div", 
     errorPlacement: function(error, element) { 
      error.appendTo(errorPlaceholder); 
     } 
    }); 
} 

function validateForm() { 
     var ok = $("#myFormId").valid(); 
     if(!ok) { 
      Utils.ShowAlert("Invalid form", errorPlaceholder.html(), BootstrapDialog.TYPE_WARNING); 
     } 

     return ok; 
    } 

而對於一個輸入標記樣品;)

<input data-msg-year="The construction year must be lower than the current year" data-rule-year="true" id="CARACTERISTICAS_GENERALES_antigue_cons" max="2100" min="1700" name="CARACTERISTICAS_GENERALES.antigue_cons" step="1" type="text" value="1700" data-role="numerictextbox" class="k-input error"/> 
相關問題