Stef@n utworzono 22 maja 2012 utworzono 22 maja 2012 Witam, mam pewnie problem z kalendarzem JQuery UI(Datepicker). Potrzebuje wykonać kalendarz w taki sposób aby: [b]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. [/b] [i]Ten element wykonałem tak i DZIAŁA:[/i] [CODE]$(document).ready(function() { $("#DataOd").datepicker({ minDate: 0, maxDate: "+1Y", numberOfMonths: 2, beforeShowDay: function (date) { /* Blokowanie dni tygodnia */ var dni_tygodna = ["1", "3"]; //wybrane dni tygodnia do odblokowania var dtDate = date.getDay().toString(); if ($.inArray(dtDate, dni_tygodna) == -1) return [false,"","Nie można rezerwować w ten dzień!"]; else return [true, ""]; } }); });[/CODE] [b]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:[/b] [i]Wybrane dni wybieram tak i DZIAŁAJĄ:[/i] [CODE]$(document).ready(function() { $("#DataOd").datepicker({ minDate: 0, maxDate: "+1Y", numberOfMonths: 2, beforeShowDay: function (date) { /* Dodatkowe odblokowanie w przedziałach czasowych */ var aktywne_dni = ["7-11-2012", "7-22-2012", "7-27-2012"]; //WYbrany dni do doblokowania var mm = date.getMonth() + 1, dd = date.getDate(), yy = date.getFullYear(); var adDate = mm + "-" + dd + "-" + yy; var adfDate = adDate.toString(); if ($.inArray(adfDate, aktywne_dni) == -1) return [false,"","Nie można rezerwować w ten dzień!"]; else return [true, ""]; } }); });[/CODE] 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ć: [CODE]$(document).ready(function() { $("#DataOd").datepicker({ minDate: 0, maxDate: "+1Y", numberOfMonths: 2, beforeShowDay: function (date) { /* Blokowanie dni tygodnia */ var dni_tygodna = ["1", "3"]; //wybrane dni tygodnia do odblokowania var dtDate = date.getDay().toString(); if ($.inArray(dtDate, dni_tygodna) == -1) return [false,"","Nie można rezerwować w ten dzień!"]; else return [true, ""]; /* Dodatkowe odblokowanie w przedziałach czasowych */ var aktywne_dni = ["7-11-2012", "7-22-2012", "7-27-2012"]; //WYbrany dni do doblokowania var mm = date.getMonth() + 1, dd = date.getDate(), yy = date.getFullYear(); var adDate = mm + "-" + dd + "-" + yy; var adfDate = adDate.toString(); if ($.inArray(adfDate, aktywne_dni) == -1) return [false,"","Nie można rezerwować w ten dzień!"]; else return [true, ""]; } }); });[/CODE] 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
leggo komentarz 26 maja 2012 komentarz 26 maja 2012 Funkcja kończy swoje działanie gdy natrafi na [b]return[/b], nawet gdy nie jest to koniec kodu. Twój połączony kod nie działa, ponieważ funkcja kończy się wykonywać na pierwszym if-ie. Żeby działało jak należy musisz oba if-y połączyć i przerzucić na koniec funkcji: [CODE] $(document).ready(function() { $("#datepicker").datepicker({ minDate: 0, maxDate: "+1y", numberOfMonths: 2, beforeShowDay: function(date) { var dni_tygodna = ["1", "3"]; var dtDate = date.getDay().toString(); var aktywne_dni = ["7-22-2012", "7-23-2012", "7-24-2012", "7-27-2012"]; var mm = date.getMonth() + 1, dd = date.getDate(), yy = date.getFullYear(); var adDate = mm + "-" + dd + "-" + yy; var adfDate = adDate.toString(); if (($.inArray(dtDate, dni_tygodna) == -1) && ($.inArray(adfDate, aktywne_dni) == -1)) return [false,"","Nie można rezerwować w ten dzień!"]; else return [true, ""]; } }); }); [/CODE]
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.