Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQuery] Datepicker - odblokowanie dni
Forum PHP.pl > Forum > Po stronie przeglądarki
Stef@n
Witam, mam pewnie problem z kalendarzem JQuery UI(Datepicker). Potrzebuje wykonać kalendarz w taki sposób aby:
1) Aby w całym przedziale czasowym np. 2 lata można było wybierać tylko wybrane dni z tygodnia np. tylko poniedziałki i środy.
Ten element wykonałem tak i DZIAŁA:
  1. $(document).ready(function() {
  2. $("#DataOd").datepicker({
  3. minDate: 0,
  4. maxDate: "+1Y",
  5. numberOfMonths: 2,
  6. beforeShowDay: function (date) {
  7.  
  8. /* Blokowanie dni tygodnia */
  9. var dni_tygodna = ["1", "3"]; //wybrane dni tygodnia do odblokowania
  10. var dtDate = date.getDay().toString();
  11. if ($.inArray(dtDate, dni_tygodna) == -1) return [false,"","Nie można rezerwować w ten dzień!"];
  12. else return [true, ""];
  13.  
  14. }
  15. });
  16. });


2) Do tego kalendarza potrzebuje zrobić wyjątek np. w przedziale czasowym od 7 lipca 2012 do 30 lipca 2012 mają wyłączyć się dni tygodnia z Punktu 1 (wyżej napisany), a mają odblokować się dni wybrane:
Wybrane dni wybieram tak i DZIAŁAJĄ:
  1. $(document).ready(function() {
  2. $("#DataOd").datepicker({
  3. minDate: 0,
  4. maxDate: "+1Y",
  5. numberOfMonths: 2,
  6. beforeShowDay: function (date) {
  7.  
  8. /* Dodatkowe odblokowanie w przedziałach czasowych */
  9. var aktywne_dni = ["7-11-2012", "7-22-2012", "7-27-2012"]; //WYbrany dni do doblokowania
  10. var mm = date.getMonth() + 1, dd = date.getDate(), yy = date.getFullYear();
  11. var adDate = mm + "-" + dd + "-" + yy;
  12. var adfDate = adDate.toString();
  13.  
  14. if ($.inArray(adfDate, aktywne_dni) == -1) return [false,"","Nie można rezerwować w ten dzień!"];
  15. else return [true, ""];
  16.  
  17. }
  18. });
  19. });


Pierwszy problem polega na tym, że nawet jeśli spróbuje połączyć oba ustawienia z punktu 1 i 2 to działa tylko jedna z opcji. Oto przykład kodu, który próbowałem połączyć:
  1. $(document).ready(function() {
  2. $("#DataOd").datepicker({
  3. minDate: 0,
  4. maxDate: "+1Y",
  5. numberOfMonths: 2,
  6. beforeShowDay: function (date) {
  7.  
  8. /* Blokowanie dni tygodnia */
  9. var dni_tygodna = ["1", "3"]; //wybrane dni tygodnia do odblokowania
  10. var dtDate = date.getDay().toString();
  11. if ($.inArray(dtDate, dni_tygodna) == -1) return [false,"","Nie można rezerwować w ten dzień!"];
  12. else return [true, ""];
  13.  
  14. /* Dodatkowe odblokowanie w przedziałach czasowych */
  15. var aktywne_dni = ["7-11-2012", "7-22-2012", "7-27-2012"]; //WYbrany dni do doblokowania
  16. var mm = date.getMonth() + 1, dd = date.getDate(), yy = date.getFullYear();
  17. var adDate = mm + "-" + dd + "-" + yy;
  18. var adfDate = adDate.toString();
  19.  
  20. if ($.inArray(adfDate, aktywne_dni) == -1) return [false,"","Nie można rezerwować w ten dzień!"];
  21. else return [true, ""];
  22.  
  23. }
  24. });
  25. });

Przy powyższym kodzie wyświetlają się tylko wybrane dni tygodnia jak w ustawieniu 1, natomiast blokada pojedynczych dni nie zadziałała. Jak to połączyć i zrobić przedział z punktu ustawień 2, aby w przedziale wyświetlały się daty wybrane a poza przedziałem tylko dni tygodnia z pierwszego punktu.

Bardzo proszę o pomoc. Pozdrawiam
krowal
Przecież jak dałeś return po sprawdzeniu tych pierwszych dni to funkcja nawet nie dojdzie do sprawdzania drugiej tablicy z datami... Powinieneś te dwie tablice sprawdzać w jednym if'ie:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $("#DataOd").datepicker({
  3. minDate: 0,
  4. maxDate: "+1Y",
  5. numberOfMonths: 2,
  6. beforeShowDay: function (date) {
  7.  
  8. /* Blokowanie dni tygodnia */
  9. var dni_tygodna = ["1", "3"]; //wybrane dni tygodnia do odblokowania
  10. var dtDate = date.getDay().toString();
  11.  
  12. var aktywne_dni = ["7-11-2012", "7-22-2012", "7-27-2012"]; //WYbrany dni do doblokowania
  13. var mm = date.getMonth() + 1, dd = date.getDate(), yy = date.getFullYear();
  14. var adDate = mm + "-" + dd + "-" + yy;
  15. var adfDate = adDate.toString();
  16.  
  17. if ($.inArray(dtDate, dni_tygodna) == -1 || $.inArray(adfDate, aktywne_dni) == -1) return [false,"","Nie można rezerwować w ten dzień!"]; // tutaj sprawdzasz czy oba warunki są spełnione
  18. else return [true, ""];
  19. }
  20. });
  21. });
[JAVASCRIPT] pobierz, plaintext

Mogą być błędy nie sprawdzałem czy działa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.