jquery datepicker — проблема перед показом дня

У меня есть следующий код:

$(document).ready(function(){

   $(".datepicker").each(function() {

     $(this).datepicker({
    beforeShowDay: function(date){ return [$(this).parent().find("span.days").html(), ""] },

     });
   });

  });

С этим кодом тела...

<div>
<span class="days">(date.getDay() == 1 || date.getDay() == 4)</span>
<input type="text" class="datepicker">
</div>


<div>
<span class="days">(date.getDay() == 2 || date.getDay() == 5)</span>
<input type="text" class="datepicker">
</div>

Я хочу, чтобы у каждого средства выбора даты были разные дни.

Способ, которым я пытаюсь это сделать (помещая изменяющуюся часть кода beforeShowDay в диапазон), может быть не самым элегантным, поэтому не стесняйтесь разбирать мой код и изменять его при необходимости.


person Tom    schedule 28.09.2010    source источник


Ответы (1)


Вы можете создать объект, сохраняющий доступные для выбора дни, например:

var pickable = { dp1: [1, 4], dp2: [2, 5] };
$('.datepicker').each(function() {
  $(this).datepicker({
    beforeShowDay: function(date){ 
        var day = date.getDay(), days = pickable[this.id];
        return [$.inArray(day, days) > -1, ""];
    }
  });
});​

Вы можете попробовать здесь. dp1 и dp2 - это идентификаторы элементов управления... или любого атрибута, который вы можете сопоставить, например:

<input type="text" class="datepicker" id="dp1">
<input type="text" class="datepicker" id="dp2">

Концепция довольно проста: возьмите идентификатор, чтобы получить массив дней для этого средства выбора, а затем используйте $.inArray() чтобы увидеть, находится ли текущий день в этом массиве. Если эти выборки дней могут быть общими, не используйте идентификатор, вместо этого сделайте что-то вроде data-pickerType для атрибута и замените this.id на $(this).attr("data-pickerType") в приведенном выше коде.

Примечание. Я оставил .each() нетронутым, потому что знаю, что он нужен вам по причинам вне текущего вопроса.

person Nick Craver    schedule 28.09.2010