Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jQuery - Datepicker, beforeShowDay 
V
    Опции темы
StachelDraht
Дата 7.9.2009, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



Привет!
Прошу помощи. 
Не могу разобраться как использовать beforeShowDay в jquery datepicker. Понял только то, что он принимает массив.

Вобщем нужно показать календарик с некоторыми отмеченными датами.

Спасибо!
PM MAIL   Вверх
unicross
Дата 7.9.2009, 20:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 5
Всего: 53



Событие beforeShowDay наступает для каждой даты перед отображением календаря. Указывается ссылка на функцию следующего формата:
Код

beforeShowDay: function(Объект Date) {
}

Внутри функции необходимо вернуть массив со следующими элементами:
0 — значение true, если можно выбрать дату или false в противном случае;
1 — имя класса (или классов) для даты;
2 — текст всплывающей подсказки.

Код

$("#datepicker").datepicker({
   beforeShowDay: function(d) {
      var curd = $.datepicker.formatDate("dd.mm.yy", new Date());
      var dat = $.datepicker.formatDate("dd.mm.yy", d);
      // Если дата является текущей, то указываем для ячейки с датой
      // класс cls1, а также задаем текст подсказки
      if (dat == curd) return [true, "cls1", "Это сегодня"];
      // Если число месяца равно 10, то делаем дату неактивной
      else if (d.getDate() == 10) return [false, "cls2"];
      else return [true, "cls2"];
   }
});

Результат (красным выделены изменения):
Текущая дата
Цитата

<TD class=" ui-datepicker-days-cell-over cls1 ui-datepicker-today" title="Это сегодня" onclick="DP_jQuery.datepicker._selectDay('#datepicker',8,2009, this);return false;">
<A class="ui-state-default ui-state-highlight" href="#">7</A></TD>

Выходные
Цитата

<TD class=" ui-datepicker-week-end cls2" onclick="DP_jQuery.datepicker._selectDay('#datepicker',8,2009, this);return false;">
<A class="ui-state-default" href="#">5</A></TD>

Обычные дни
Цитата

<TD class=" cls2" onclick="DP_jQuery.datepicker._selectDay('#datepicker',8,2009, this);return false;">
<A class="ui-state-default" href="#">4</A></TD>




Это сообщение отредактировал(а) unicross - 7.9.2009, 21:17
PM MAIL WWW   Вверх
StachelDraht
Дата 8.9.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



unicross, 
спасибо огромное, картина более менее прояснилась.
Но у меня еще один вопрос. Как вбить дату типа 09/09/2009.
На данный момент мы вводим просто число число месяца, и в каждом месяце данное число становиться не активно.

Спасибо!

Это сообщение отредактировал(а) StachelDraht - 8.9.2009, 09:48
PM MAIL   Вверх
unicross
Дата 8.9.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 5
Всего: 53



Цитата(StachelDraht @  8.9.2009,  10:47 Найти цитируемый пост)
Но у меня еще один вопрос. Как вбить дату типа 09/09/2009.

Код

$("#datepicker").datepicker({
   beforeShowDay: function(d) {
      var curd = $.datepicker.formatDate("dd.mm.yy", new Date());
      var dat = $.datepicker.formatDate("dd.mm.yy", d);
      // Если дата является текущей, то указываем для ячейки с датой
      // класс cls1, а также задаем текст подсказки
      if (dat == curd) return [true, "cls1", "Это сегодня"];
      // Если дата равна "10.09.2009", то делаем ее неактивной
      else if (dat == "10.09.2009") return [false, "cls2"];
      else return [true, "cls2"];
   }
});

Теперь только определенная дата ("10.09.2009") станет неактивной.

Приведение даты к нужному формату осуществляется с помощью $.datepicker.formatDate()
PM MAIL WWW   Вверх
StachelDraht
Дата 8.9.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



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

Добавлено через 4 минуты и 3 секунды
или только если добавить?
Код

else if (dat == "11.09.2009") return [false, "cls2"];


Это сообщение отредактировал(а) StachelDraht - 8.9.2009, 14:34
PM MAIL   Вверх
unicross
Дата 8.9.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 5
Всего: 53



Цитата(StachelDraht @  8.9.2009,  15:32 Найти цитируемый пост)
а если скажем две даты? 

Код

else if (dat == "11.09.2009" || dat == "12.09.2009") return [false, "cls2"];

PM MAIL WWW   Вверх
StachelDraht
Дата 8.9.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



а можно таким же образом проверять целый массив?
Код

var dates = new Array("11.09.2009", "12.09.2009");
.....
else if (dat == dates[]) return [false, "cls2"];

или такое не прокатит?
PM MAIL   Вверх
unicross
Дата 8.9.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 5
Всего: 53



Цитата(StachelDraht @  8.9.2009,  15:46 Найти цитируемый пост)
или такое не прокатит?

Нет.

Код

var dates = new Array("11.09.2009", "12.09.2009");
for (var i=0, c=dates.length; i<c; i++) if (dat == dates[i]) return [false, "cls2"];

PM MAIL WWW   Вверх
StachelDraht
Дата 8.9.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



unicross, спасибо тебе огромное!
PM MAIL   Вверх
eidicon
Дата 7.5.2012, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 7.5.2012

Репутация: нет
Всего: нет



Имею перед собой такую задачу:
Необходимо  отметить в datapicker дни которые берутся из массива.
Примерно так я себе это представляю для выполнения, но пока не работает данное выражение. 
Код

$(function() {
    $('#dpCall').datepicker({
        dateFormat: 'yy/mm/dd',
        beforeShowDay: function (date) {
             var mDates = new Array("2012/05/11", "2012/05/12", "2012/05/13","2012/05/14","2012/05/15");
                     var a=mDates.length
             //даты объявлены сразу для примера 
                      if (a !=0 ){
                  for ( i=0; i<mDates.length; i++) 
                      {return [true, "markedDay","!"];
                      a-=1;}}
                  else 
                      return [true,'']; 
               }
   });


Это сообщение отредактировал(а) eidicon - 7.5.2012, 22:25
PM MAIL   Вверх
Aliance
Дата 10.5.2012, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 7
Всего: 137



Цитата(StachelDraht @  8.9.2009,  15:46 Найти цитируемый пост)
а можно таким же образом проверять целый массив?

$.inArray()
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0919 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.