2010-09-21 16 views
10

Im przy użyciu wtyczki sprawdzania poprawności jQuery i zastanawiałem się, czy istnieje sposób sprawdzania poprawności, jeśli data wprowadzona do pola była data jak yyyy-mm-dd ORAZ data jest między 29 listopada 2010 - 15 grudnia 2010 r.jQuery Validate (zakres dat)

Jestem całkiem nowy dla jQuery, więc jeśli istnieje odpowiedź, prosimy o jak najgłębszą odpowiedź, aby mógł przejść przez to. Bardzo dziękuję za wszelkie sugestie/wszystkie

Odpowiedz

7

nigdy nie używałem plugin sprawdzania poprawności, ale wygląd poprzez API sugeruje, że coś takiego może działać:

$.validator.addMethod('daterange', function(value, element) { 
    if (this.optional(element)) { 
     return true; 
    } 

    var startDate = Date.parse('2010-11-29'), 
     endDate = Date.parse('2010-12-15'), 
     enteredDate = Date.parse(value); 

    if (isNan(enteredDate)) { 
     return false; 
    } 

    return ((startDate <= enteredDate) && (enteredDate <= endDate)); 
}); 

można będzie wtedy, jak sądzę, potrzebę aby dodać klasę daterange do odpowiedniego elementu.

5

Odpowiedź Lonesomeday jest dość bliska, z kilkoma poprawkami. Chciałbym zakończyć kod w następujący sposób:

if(isNaN(enteredDate)) return false; 

    return ((startDate <= enteredDate) && (enteredDate <= endDate)); 
}, "Please specify a date between 2010-11-29 and 2010-12-15"); 

ten ustala funkcję isNaN, a także zapewnia komunikat o błędzie do swoich użytkowników, żeby wiedzieć, co szukasz.

+0

Emily, proszę poprawić datę w komunikacie walidacyjnym tj. 2010-12-15

9

Jeśli chcesz funkcję wielokrotnego użytku, można przedłużyć Emily i odpowiedzi lonesomeday, aby umożliwić argument należy dostarczyć:

$.validator.addMethod('daterange', function(value, element, arg) { 
    // Same as above 

    var startDate = Date.parse(arg[0]), 
     endDate = Date.parse(arg[1]), 
     enteredDate = Date.parse(value);  
    // Same as below 

}, $.validator.format("Please specify a date between {0} and {1}.")) 

Zobacz source z jQuery poprawności range metody dla przykładu.

1

Wykonał kilka drobnych poprawek w kodzie Connora.

Otrzymany kod robocza wynosi:

$.validator.addMethod('daterange', function(value, element, arg) { 
    if (this.optional(element) && !value) { 
     return true; 
    } 

    var startDate = Date.parse(arg[0]), 
     endDate = Date.parse(arg[1]), 
     enteredDate = Date.parse(value); 

    if (isNaN(enteredDate)) { 
     return false; 
    } 

    return ((isNaN(startDate) || (startDate <= enteredDate)) && 
      (isNaN(endDate) || (enteredDate <= endDate))); 


    }, $.validator.format("Please specify a date between {0} and {1}.")); 

następnie używać go tak:

$("#some_date_input").rules("add",{daterange:['01/31/2001','01/31/2020']}); 
1

trzymać konie, chłopaki! :)

Nie zapominaj, że funkcja Date.parse nie może działać poprawnie z różnymi ustawieniami regionalnymi, analizuje tylko poprawnie określony format daty.

Jeśli używasz różnych formatów daty (specyficznych dla kultury) - lepiej trzymać się daty obsługi datepicker jquery.

Załóżmy więc, że załadowałeś właściwy obiekt datakksu jQuera specyficzny dla kultury (na przykład jquery.ui.datepicker-nb-NO.js, gdzie format daty to DD.MM.rrrr i nie jest przetwarzany przez Date. analizować) i zainicjowana go, jest właściwe podejście:

$.validator.addMethod('dateRange', function (value, element, parameterValue) { 
     if (this.optional(element) && !value) { 
      return true; 
     } 
     var dateFormat = $(element).datepicker('option', 'dateFormat'); 
     try { 
      var startDate = $.datepicker.parseDate(dateFormat, parameterValue[0]).getTime(); 
      var endDate = $.datepicker.parseDate(dateFormat, parameterValue[1]).getTime(); 
      var enteredDate = $.datepicker.parseDate(dateFormat, value).getTime(); 
      return (startDate <= enteredDate) && (enteredDate <= endDate); 
     } catch (error) { 
      return true; 
     } 
    }); 

Włożyłam parseDate rzeczy wewnątrz bloku try, bo nie ma normalny sposób, aby dowiedzieć się, jeżeli data została prawidłowo przetwarzane.