2013-12-22 3 views
7

Я использую FullCalendar.js на своем веб-сайте. Я установил события из бэкэнда. Я хочу изменить внешний вид дня, в котором есть событие. Другими словами, мне нужен какой-то класс, где у меня есть «fc-day» и событие в нем.Как выделить день, в котором есть событие в FullCalendar.js?

My code looks like and you see it on jsFiddle:

$('#calendar').fullCalendar({ 
    events: [{ 
     title: 'event1', 
     start: '2013-01-01' 
    }, { 
     title: 'event2', 
     start: '2013-12-05', 
     end: '2013-12-07' 
    }, { 
     title: 'event3', 
     start: '2013-12-15' 
    }] 
}) 
+0

однозначного ответа до сих пор ??? –

+0

Какой внешний вид вы хотите изменить? u может добавить .fc-event {background-color: red;} в страницу ur, и это сделает цвет события красным. или использовать jquery, выберите все div с этим классом и addClass, что вы хотите установить. – Neha

+0

Проверьте рабочую демонстрацию здесь http://jsfiddle.net/subodhghulaxe/sj5CD/ –

ответ

4

Я не мог найти нужное свойство или метод, используемый в документации Fullcalendar.

я придумал своего родом грязного раствора: добавление класса по данным-атрибуты:

function addClassByDate(date) { 
    var dataAttr = getDataAttr(date); 
    $("[data-date='" + dataAttr + "']").addClass("hasEvent"); 
} 

function getDataAttr(date) { 
    return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + (date.getDate().toString().length === 2 ? date.getDate() : "0" + date.getDate()); 
}; 

Он отлично работает для настройки, вы указали в своем вопросе.

Рабочий пример можно найти здесь: http://jsfiddle.net/6NShN/9/

+0

Мне пришлось изменить это на 'function getDataAttr (date) { return date.getFullYear() +" - "+ ((date.getMonth () +1) .toString(). Length === 2? (Date.getMonth() + 1): «0» + (date.getMonth() + 1)) + «-» + (date.getDate() .toString(). length === 2? date.getDate(): "0" + date.getDate()); }; '}; как атрибут даты передачи данных, по-видимому, использует ведущие 0s для однозначных месяцев, а Date.getMonth() является 0-индексированным (например, 0 == Январь), а дата данных - 1-индексированная (01 == Январь). В противном случае хорошее решение. –

+0

Это решение работает для меня, но в последний день в течение нескольких дней, не имеет класса hasEvent. Любая помощь? –

+0

Я установил это раньше, пока вы в своей скрипке: evFinishDate.setDate (evFinishDate.getDate() + 1); –

0

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

Fiddle demo

$(document).ready(function(){ 
    $(".fc-event").addClass("myclass"); 
    }); 
+0

какая версия вы говорите? –

0

Heres другой Fiddle JS FIDDLE

Просто добавив

textColor: 'white', 
backgroundColor:'purple' 

Вы можете изменить стиль

JS Код:

$('#calendar').fullCalendar({ 

    eventSources: [ 

     // your event source 
     { 
      events: [ 
     { 
      title : 'event1', 
      start : '2013-01-01' 
     }, 
     { 
      title : 'event2', 
      start : '2013-12-05', 
      end : '2013-12-07' 
     }, 
     { 
      title : 'event3', 
      start : '2013-12-15' 
     }], 

      textColor: 'white', 
      backgroundColor:'purple' 
     } 

     // any other event sources... 

    ] 

}); 
3

Это, как я сделал это, чтобы дать цвет фона для каждого события.

JS FIDDLE DEMO

events: [ 
    { 
     title: 'Test1', 
     start: new Date(2014, 2, 28, 12, 0), 
     end: new Date(2014, 2, 30, 12, 0), 
     backgroundColor: '#80ACED', 
    }, 
    { 
     title: 'Test2', 
     start: new Date(2014, 2, 14, 3, 55), 
     end: new Date(2014, 2, 21, 12, 0), 
     backgroundColor: '#80ACED', 
    }, 
    { 
     title: 'Test3', 
     start: new Date(2014, 2, 2, 12, 0), 
     end: new Date(2014, 2, 2, 12, 0), 
     backgroundColor: '#E82525', 
    } 
     ] 

Надеется, что это помогает. См: http://arshaw.com/fullcalendar/docs/event_data/Event_Object/

+1

Он хочет изменить внешний вид дня, а не события. –

3

Наконец это то, как он работал на меня взглянуть на этот

jsfiddle

$('#calendar').fullCalendar({ 
     events: [ 
     { 
      title : 'event1', 
      start : '2014-04-01' 
     }, 
     { 
      title : 'event2', 
      start : '2014-04-05', 
     }, 
     { 
      title : 'event3', 
      start : '2014-04-15' 
     } 
    ], 
    eventRender: function (event, element, view) { 
     // like that 
     var dateString = $.fullCalendar.formatDate(event.start, 'yyyy-MM-dd'); 
     view.element.find('.fc-day[data-date="' + dateString + '"]').css('background-color', '#FAA732'); 
    } 

}); 
+0

'formatDate()' fullcalendar v1, с v2 он не будет работать, см. Http://fullcalendar.io/wiki/Upgrading-to-v2/ –

1

Ни один из них не будет работать в течение> = v2.0, так как fullCalendar начал используя момент.js для форматирования даты.

Следующая работал для меня (передается функции инициализации fullCalendar):

eventRender: function (event, element, view) { 

var dateString = moment(event.start).format('YYYY-MM-DD'); 

view.element.find('.fc-day[data-date="' + dateString + '"]').addClass('fc-has-event'); 

} 
+0

привет, это не сработало для меня в версии 2.1. Он говорит: «Uncaught TypeError: Не могу прочитать свойство« найти »неопределенного полного календаря» – l1th1um

2

weswesweswes почти правильно view.element должен быть вид.эль

eventRender: function (event, element, view) { 

    var dateString = moment(event.start).format('YYYY-MM-DD'); 

    view.el.find('.fc-day[data-date="' + dateString + '"]').addClass('fc-has-event'); 

} 
+0

Это единственное решение, которое я нашел для работы. – tehlivi

0

Fullcalendar v2, для просмотра agendaWeek:

eventRender: function(event, element, view){ 
    if(view.name=='agendaWeek') { 
     var weekdays = new Array('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'); 
     var eventweekday = $.fullCalendar.moment(event.start).format('d'); 
     $('.fc-'+weekdays[eventweekday]).css('background-color', '#FFC'); 
    } 
}, 

Выделяет все дни с событиями.

example fullcalendar day highlight

4

Вы можете использовать eventRender() свойство Full Canendar.

Это работает для меня с fullcalendar v2:

$('#calendar').fullCalendar({ 
     events: [ 
     { 
      title : 'event1', 
      start : '2014-04-01' 
     }, 
     { 
      title : 'event2', 
      start : '2014-04-05', 
     }, 
     { 
      title : 'event3', 
      start : '2014-04-15' 
     } 
    ], 
    eventRender: function (event, element, view) { 
     // like that 
     var dateString = moment(event.start).format('YYYY-MM-DD'); 
     $('#calendar').find('.fc-day-number[data-date="' + dateString + '"]').css('background-color', '#FAA732'); 
    } 

}); 

Node: You will need Moment library for this.

не
+0

Первое, что нужно сделать за 2 недели. Ты великолепен. Спасибо. – Haring10

Смежные вопросы