2010-12-12 10 views
26

Mam dwa pola tekstowe z podłączonym datepickerem. Pola tekstowe dotyczą daty rozpoczęcia i zakończenia. Pierwszy datepicker jest skonfigurowany tak, aby użytkownik nie mógł wybrać daty przed dniem dzisiejszym, ale może wybrać dowolną datę w przyszłości.Ogranicz datę w datacku jquery w oparciu o inny datepicker lub pole tekstowe.

Jak mogę ustawić drugi datepicker tak, aby nie mógł wybrać daty przed datą wybraną w pierwszym selektorze daty? Na przykład: Jeśli dzisiaj jest 12/11/10 i wybieram 12/15/10 w pierwszym datepicker, to drugi wybór daty nie powinien być w stanie wybrać niczego przed 12/15/10.

Herezje co mam tak daleko:

$("#txtStartDate").datepicker({ minDate: 0 }); 
$("#txtEndDate").datepicker({}); 

Odpowiedz

29

Na przykład, w tym przykładowego kodu, startDatePicker jest wybrany 2010-12-12, zmiany zdarzenie startDatePicker ustawia minDate z endDatePicker 2010-12-13. Blokuje komórki przed tą datą. To jest przykład tego, o czym wspomniał @Victor. Mam nadzieję, że to pomoże ... Pozdrawiam ... Ozlem.

$("#startDatePicker").datepicker({ 
    dateFormat: 'yy-mm-dd', 
    changeMonth: true, 
    minDate: new Date(), 
    maxDate: '+2y', 
    onSelect: function(date){ 

     var selectedDate = new Date(date); 
     var msecsInADay = 86400000; 
     var endDate = new Date(selectedDate.getTime() + msecsInADay); 

     //Set Minimum Date of EndDatePicker After Selected Date of StartDatePicker 
     $("#endDatePicker").datepicker("option", "minDate", endDate); 
     $("#endDatePicker").datepicker("option", "maxDate", '+2y'); 

    } 
}); 

$("#endDatePicker").datepicker({ 
    dateFormat: 'yy-mm-dd', 
    changeMonth: true 
}); 
+0

Dziękujemy! Również selektorem dla "endDatePicker" powinien być "#endDatePicker" – greaterKing

4

z czystego UI punktu widzenia, nie powinno. Jeśli użytkownik wybierze nieprawidłowy miesiąc na obu datepickerach i spróbuje wybrać prawidłowy miesiąc, ma 50% zmiany w utrudnieniu przez interfejs użytkownika. W idealnej sytuacji pozwolisz na nieprawidłowy wybór i wyświetlisz pomocny komunikat o błędzie informujący, że data końcowa powinna być późniejsza niż data zakończenia.

Jeśli chcesz zaimplementować swój pomysł: nadaj każdemu datepickerowi zdarzenie "change", które odpowiednio zmienia opcje w drugim zbiorze danych.

+0

Bardzo dobrze, już miałem zaimplementować tę samą koncepcję, a następnie zdałem sobie sprawę, że wykorzystam JavaScript, aby wyświetlić błąd! Dzięki, Victor! –

+0

To jest dobra rada, ale jak ustawić defaultad zamiast używać techniki podobnej do Tin Man sugeruje poniżej? To było moje rozwiązanie. –

3

Użyj „getDate” metodę pierwszego datepicker UI i przekazać go do minDate opcją drugiego datepicker:

$("#txtEndDate").datepicker({ 
    showOn: "both", 
    minDate: $("#txtStartDate").datepicker("getDate") 
}); 
29

Aktualizacja:

Podejście powyżej ustawić minDate tylko na czas tworzenia. kiedyś onselect zdarzenie zmiany opcji minDate drugiego datepicker tak:

$("#txtStartDate").datepicker({ 
    showOn: "both",  
    onSelect: function(dateText, inst){ 
    $("#txtEndDate").datepicker("option","minDate", 
    $("#txtStartDate").datepicker("getDate")); 
    } 
}); 
+0

Najprostszy i najbardziej przydatny sposób. – bodi0

1

użyć tego kodu:

<script type="text/javascript"> 
    $(function() { 
     $("#txtStartDate").datepicker({ 
      dateFormat: 'dd/mm/yy', 
      inline: true, 
      minDate: 'dateToday' 
     }); 
     $("#txtEndDate").datepicker({ 
      dateFormat: 'dd/mm/yy', 
      inline: true, 
      minDate: $("#txtStartDate").datepicker("getDate") }); 
     }); 
</script> 
2

spróbować tego człowieka:

$("#dateTo").datepicker({ 
    dateFormat: 'dd/mm/yy', 
    changeMonth: true, 
    changeYear: true, 
    minDate: new Date() 
    }).datepicker("setDate", new Date()); 
$("#dateFrom").datepicker({ 
    dateFormat: 'dd/mm/yy', 
    changeMonth: true, 
    changeYear: true, 
    onSelect: function(){ 
     $('#dateTo').datepicker('option', 'minDate', $("#dateFrom").datepicker("getDate")); 
    } 
    }).datepicker("setDate", new Date()); 
5

rozwiązanie Blaszany człowieka pracował dla mnie po dodaniu $ ("# txtEndDate"). datepicker() na dole

$("#txtStartDate").datepicker({ 
    showOn: "both",  
    onSelect: function(dateText, inst){ 
    $("#txtEndDate").datepicker("option","minDate", 
    $("#txtStartDate").datepicker("getDate")); 
    } 
}); 

$("#txtEndDate").datepicker(); //it is not working with out this line 
Powiązane problemy