запретить сброс jQuery datepicker после события onSelect

#jquery #datepicker #jquery-ui-datepicker

#jquery #datepicker #jquery-ui-datepicker

Вопрос:

Я не знаю, как это называется, я думаю, что-то вроде reset..

Случай такой: я использую встроенный datepicker, а затем добавляю новый класс с собственным стилем (css) к некоторой дате в datepicker. Ниже приведен код:

 $("#calendar").datepicker({ 
                            showOtherMonths: true, 
                            onSelect:function(){
                                                alert($(this).val());
                                                }
                            });
$(document).ready(function(){
    customDate();
});                         
function customDate(){
    $("#calendar a:eq(10)").addClass("has_event");
}
  

приведенный выше код добавит новый класс в 10-й элемент с индексом ‘a’, и стиль для этого класса будет:

 .has_event{
    color:#bb0000 !important;
    font-weight:bold !important;
    background:#cccccc !important;
}
  

Функция customDate() сначала работает хорошо, но после выбора datepicker стиль сбрасывается до значения по умолчанию, потому что добавленный новый класс исчез.

Итак, кто-нибудь знает, как предотвратить сброс datepicker после выбранного или даже после события onSelect?

@S.M.09 вот что я сделал :

 _selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)} if(id=="#calendar"){$("#calendar a:eq(10)").addClass("has_event");}}
  

Ответ №1:

Если вы обычно хотите, чтобы некоторые дни были оформлены по-другому, вы можете поместить их в массив (чтобы они были постоянными и динамическими)

 var myDates = [9,13];
  

и используйте событие beforeShowDay docs для проверки каждого дня, отображаемого в вашем массиве

  beforeShowDay:function(date) {
                      var thisDay = date.getDate();

                      return [1,((myDates.indexOf(thisDay))>-1)?'has_event':''];
                    }
  

это относится к td , поэтому вам нужно изменить свой css на .has_event a{..

демонстрация: http://jsfiddle.net/gaby/dTRNf /

Ответ №2:

В jQuery js(jquery-ui-x.x.x.custom.min.js)…вы обнаружите вызываемую функцию с четырьмя аргументами (имена переменных могут отличаться в зависимости от версии)

 _selectDay:function(a,b,c,d)
  

добавьте код непосредственно перед завершением функции

 if(a=="#calendar"){
$("#calendar a:eq(10)").addClass("has_event");
}
  

удалите if condition , если вы хотите, чтобы это было глобально…приведенный выше код применит его только к нужному вам календарю

Редактировать

 _selectDay:function(a,b,c,e){
    var f=d(a);
    if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){
        f=this._getInst(f[0]);
        f.selectedDay=f.currentDay=d("a",e).html();
        f.selectedMonth=f.currentMonth=b;
        f.selectedYear=f.currentYear=c;
        this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))
        }
    if(a=="#calendar"){
    $("#calendar a:eq(10)").addClass("has_event");
    }


},
  

Комментарии:

1. Я пробовал, как вы говорите, я нашел функцию с четырьмя аргументами, и я должен добавить код $ («#calendar a: eq(10)»).addClass(«has_event»); перед завершением этой функции (с условием if, а также без него), но datepicker по-прежнему сбрасывается после выбора. есть ли какое-либо решение для этого?

2. не перед функцией, вам нужно добавить его в конце функции… Я сказал.. непосредственно перед завершением функции .. посмотрите на редактирование

3. пожалуйста, отредактируйте свой пост и покажите мне, что вы сделали … также попробуйте поместить оповещение внутри if, чтобы проверить, поступает ли туда элемент управления…

4. конечно, я добавляю код перед завершением этой функции (внутри функции). но datepicker все еще сбрасывается