Использование beforeShowDay в JQuery UI Datepicker для закрытия дней недели - PullRequest
1 голос
/ 25 февраля 2010

что я пытаюсь сделать, это выделить несколько дней недели местом, где оно закрыто. Каждое место может быть закрыто в разные дни.

Я могу использовать следующий код в качестве теста, чтобы закрыть все воскресенья:

$('#bookingDatepicker').datepicker({
                minDate: 0, 
                maxDate: '+3M',
                dateFormat: 'DD, d MM, yy',
                altField: '#actualDate',
                altFormat: 'yy-mm-dd',
                beforeShowDay:  closedDays
            });

function closedDays(date) {
  if (date.getDay() == 0){ 
  return [false,"","Venue Closed"]; 
  } else { return [true, ""];
}
}

Однако мне, возможно, придется закрыть более одного дня, и они могут не бежать рядом друг с другом. В своем коде из базы данных я могу создать строку, примеры ниже, которая показывает, какие дни открыты ...

1,2,3,4,5,6,0    //I would want to show no days closed
2,3,4,5,6        //I would want to show Sunday (0) and Monday (1) closed

Я не уверен, что с этим делать, хотя приведенный выше код работает. Я использую PHP для создания строки, поэтому могу манипулировать ею, используя это при необходимости.

EDIT

Как обычно, когда вы отправляете вопрос, вы получаете небольшой прорыв! Я разработал код ниже, он работает, если я использую в нем фиктивные данные, однако мне нужно найти способ обернуть мои строковые значения в "". Это сейчас вызывает у меня проблемы, если я просто использую var cloDays = [2,3,4,5], он перестает работать

var cloDays = ["2","3","4","5"]; 
 function closedDays(date){
 var sDate = date.getDay().toString();
 if ($.inArray(sDate, cloDays) == -1) return [false,"","Venue Closed"];
 else return [true, ""];
}

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

этот пост не решил мою проблему, но указал мне правильное направление.

Вот что сработало так, как я хотел:

var unavailableDates = ["9-5-2011","10-5-2011"];

function unavailable(date) {
    dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear();
    if ($.inArray(dmy, unavailableDates) == -1) {
        return [true, ""];
    } else {
        return [false,"","Unavailable"];
    }
}

$('#iDate').datepicker({ minDate: +1, beforeShowDay: unavailable });

Блокирует все даты в прошлом, включая сегодня, а затем блокирует даты, указанные в массиве unavailableDates.

0 голосов
/ 25 февраля 2010

Удалось исправить это, пропустив мою строку с помощью приведенного ниже кода, в основном разбивает его в массив PHP и затем кодирует его с помощью JSON_Encode. Кажется, работает отлично:

$cloDays = json_encode(explode(",", $cloDays));  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...