jquery ui datepicker: персонализирани заглавки на имена на дни

обща информация: Използвам datpicker, за да задам работно време за магазини.. за цяла година. За това имам бутони за избор на всички понеделници и т.н. от цялата година и след това имам други бутони, които добавят класовете. например щракнете върху "понеделник", което избира всички понеделници от годината в календара. след това щракнете върху бутона „клас“ и всички понеделници получавате работно време „9:00-17:00“.

Правя това, като запазвам масив от 366 дни с информация за класа за всеки ден. Така че всеки избор на един или повече дни просто се преобразува в ден от годината и този индекс на масива се актуализира.

това работи добре, но сега искам да постигна същия ефект на седмична база. така че направих следното:

Опитвам се да постигна персонализирани имена на дни, превръщайки ги във връзки, за да избера например всички понеделници от този месец. какво имам досега:

//javascript
$("#datepicker").datepicker({
...
    beforeShowDay: setHollidays,
    dayNamesMin: ['<a class="weekSelector" href="/bg7">Zo</a>', 
                  '<a class="weekSelector" href="/bg1">Ma</a>', 
                  '<a class="weekSelector" href="/bg2">Di</a>', 
                  '<a class="weekSelector" href="/bg3">Wo</a>', 
                  '<a class="weekSelector" href="/bg4">Do</a>', 
                  '<a class="weekSelector" href="/bg5">Vr</a>', 
                  '<a class="weekSelector" href="/bg6">Za</a>'],
    monthNames: ['January<span class="invisible">0</span>',
  'February<input type="hidden" value="1" class="invisible"/>',
  'March<input type="hidden" value="2" class="invisible"/>', 
  'April<input type="hidden" value="3" class="invisible"/>',
  'May<input type="hidden" value="4" class="invisible"/>', 
  'June<input type="hidden" value="5" class="invisible"/>',
  'July<input type="hidden" value="6" class="invisible"/>',
  'August<input type="hidden" value="7" class="invisible"/>',
  'September<input type="hidden" value="8" class="invisible"/>',
  'October<input type="hidden" value="9" class="invisible"/>',
  'November<input type="hidden" value="10" class="invisible"/>', 
  'December<input type="hidden" value="11" class="invisible"/>'],
...
});

//selects all days of the month (for one month) that are a given week days. for example: all mondays
$("a.weekSelector").click(function () {
    selDay = $(this).attr("href"); // get the day index
    markerType = 'month'; //use in beforeShowday function to select the days

// добавен код var container = $(this).parent('.ui-datepicker-group');
alert($(container).find('.invisible').val()); // край на добавения код $("#datepicker").datepicker("refresh"); resetMultiSelect(); //нулиране на променливи, използвани за селекцията
return false; });

//setHollidays adds the correct classes the the days.

това също работи, но ако дните винаги се избират през първия месец (т.е. януари). Защото нямам достъп до месеца. така че когато избера заглавката „понеделник“ за месец „март“, всички понеделници за януари са избрани.

така че най-накрая ето моят въпрос: как мога да получа месеца (или първата дата от месеца) във функцията $("a.weekSelector").click?

редактиране: когато приключи, ще бъде превърнат в модул на drupal и вероятно в jquery плъгин.


person mrRuben    schedule 02.10.2011    source източник
comment
Добре, аз съм една крачка напред. Добавих скрити полета за въвеждане зад имената на месеца, за да съхранявам идентификатора/стойността на месеца. Сега мога да потърся това поле в моята функция $(a.weekSelector).click. проблемът, който имам сега, е, че предупреждението показва нула вместо стойността за месеца. Опитах и ​​със span, и със скрит вход... някакви идеи защо това не работи??   -  person mrRuben    schedule 03.10.2011


Отговори (1)


ето моя "мръсен" начин да го поправя (във функцията за щракване):

var el = $(this);
var offset = el.offset();
var elTop = offset.top;
var elLeft = offset.left;

var arr = $("a.weekSelector[href='/bg"+selDay+"']");   
$.each(arr, function(i, val) {
 var curTop = $(val).offset().top;
 var curLeft = $(val).offset().left;
 if((elTop == curTop) && (elLeft == curLeft))
{
selmonth = $(".invisible:eq("+i+")").val();
 }
});

това, което основно прави, е да извлече всички селектори за седмици със същия href като щракнатия (например всички връзки "понеделник"), след което да сравни там отместването с отместването на кликнатия елемент. след това използвах идентификатора, който получавам от това, за да потърся скритото поле.

Опитах се да търся скритото поле в DOM, но винаги изглеждаше, че се връща недефинирано.

person mrRuben    schedule 05.10.2011