2010-04-26 21 views
6

Yanında bir metin kutusu ve bir randevu var ve asp.net kullanıyorum ve kullanıcı tarihi de girebilir, tarihçiden tarih seçin.JQuery datepicker: date date mm/gg/yyyy

Tarihin doğru girilip girilmediğini nasıl doğrularsınız? Eğer ASP.NET kullanıyorsanız

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#<%=StartDate.ClientID%>').datepicker({ showOn: 'button', 
        buttonImage: '../images/Calendar.png', 
        buttonImageOnly: true, onSelect: function() { }, 
        onClose: function() { $(this).focus(); } 
      }); 
     }); 
    </script> 
+1

Doğru tarih tanımınız nedir? –

+1

, örn. 30/30/2008 geçerli bir tarih değil. –

cevap

4

, bir ASP.NET Doğrulayıcı [ASP.NET Date Validator] karşılaştırın kullanabilirsiniz.

<asp:TextBox ID="tb" runat="server"></asp:TextBox> 

<asp:CompareValidator ID="cv" runat="server" 
ControlToValidate="tb" ErrorMessage="* Please enter a valid date!" Text="*" 
Operator="DataTypeCheck" Type="Date"></asp:CompareValidator> 

**** Güncelleme **

Yukarıda karşılaştırın Doğrulayıcı'ya tarafından yürütüldü javascript aldı ve çevresinde özel bir jQuery Doğrulama yöntemini sarılmış: Eğer olduğundan

<script type="text/javascript"> 
    $(document).ready(function() { 

     $.validator.addMethod("truedate", function (value, element, params) { 
      function GetFullYear(year, params) { 
       var twoDigitCutoffYear = params.cutoffyear % 100; 
       var cutoffYearCentury = params.cutoffyear - twoDigitCutoffYear; 
       return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year)); 
      } 

      var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\.?\\s*$"); 
      try { 
       m = value.match(yearFirstExp); 
       var day, month, year; 
       if (m != null && (m[2].length == 4 || params.dateorder == "ymd")) { 
        day = m[6]; 
        month = m[5]; 
        year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10)); 
       } 
       else { 
        if (params.dateorder == "ymd") { 
         return null; 
        } 
        var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})(?:\\s|\\2)((\\d{4})|(\\d{2}))(?:\\s\u0433\\.)?\\s*$"); 
        m = value.match(yearLastExp); 
        if (m == null) { 
         return null; 
        } 
        if (params.dateorder == "mdy") { 
         day = m[3]; 
         month = m[1]; 
        } 
        else { 
         day = m[1]; 
         month = m[3]; 
        } 
        year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10)); 
       } 
       month -= 1; 
       var date = new Date(year, month, day); 
       if (year < 100) { 
        date.setFullYear(year); 
       } 
       return (typeof (date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null; 
      } 
      catch (err) { 
       return null; 
      } 
     }, "Please enter an actual date."); 

     $("#form1").validate(); 

     $("#one").rules('add', 
     { 
      truedate: { 
       cutoffyear: '2029', 
       dateorder: 'mdy' 
      } 
     }); 
    }); 

</script> 

<input id="one" /> 
+0

Asp.net denetimini kullanma seçeneğim olduğunu biliyorum ama jQuery doğrulamasını kullanmayı denemek istedim. –

+0

Karşılaştırma validator tarafından üretilen javascript'i çektim ve – dochoffiday

+0

etrafına özel bir yöntem ekledikten sonra 'remote' kullanabilir ve sunucuda sadece geçerli bir tarih olan – dochoffiday

0

zaten jquery kullanarak, doğrulama için büyük bir esnekliğe sahip http://bassistance.de/jquery-plugins/jquery-plugin-validation/ kontrol edebilirsiniz.

+0

Form doğrulama için bassistance.de kullanıyorum ama herhangi bir örnek bulamıyorum tarih doğrulama, lütfen beni yönlendirirseniz lütfen –

+1

bir tarih doğrulama vardır, ancak sadece dize biçimini kontrol eder, yani "30/30/2008" geçerli bir tarih olurdu – dochoffiday

+0

@Doc: bu yüzden gerçek bir yol yok tarihi kontrol etmek için mi yoksa asp.net validatin kontrollerini kullanmak için sadece bir seçenek mi bıraktım? –

33

Doğrulama için bu işleyiciyi kullanıyorum:

onClose: function(dateText, inst) { 
     try { 
      $.datepicker.parseDate('dd/mm/yy', dateText); 
     } catch (e) { 
      alert(e); 
     }; 

Umut, ben ısdate aradım bir özel doğrulama datepicker denetimin parseDate yarar yöntemi kullanılarak, ben Katrin & Doc Holiday'in yaklaşımının bir karışımını kullanıyorum birileri

+1

Böyle küçük bir fanfare ile mükemmel bir cevap! –

4

için yararlı olacak.

Sadece parseDate biçimindeki argüman argümanını uygun değere çevirin (referans: http://docs.jquery.com/UI/Datepicker/parseDate).

Doğrulayıcı için bir UI denetimine başvurmak en iyi yöntem değildir, ancak ne işe yaramaktadır. :)