FullCalendar-在DayClick上获取后台事件

时间:2018-09-24 09:25:38

标签: fullcalendar fullcalendar-3

我当前正在尝试触发DayClick时获取事件(类型为background)。 由于背景类型的原因,我无法使用EventClick触发器(我不知道为什么,但在我的情况下什么也没有发生,这是FullCalendar的问题?)。

这是我的初始化代码:

$('#calendarRoomUnavailable').fullCalendar({
        height: 'auto',
        header: {
            left : '',
            center: 'title',
            right: ''
        },
        defaultView: 'year',
        defaultDate: getDateFilterRoomAvailable(),
        lang: 'fr',
        firstDay: 1,
        columnFormat: 'ddd D/M',
        selectable : false,
        weekends: false,
        navLinks : false,
        events: basePath + '/agenda/datalist/room_available',
        viewRender: function (view, element) {

        },
        eventRender: function(event,element){
            if(event.rendering === "background"){
                element.data(event); //store the event data inside the element
            }
        },
        dayClick: function (date, jsEvent, view) {
            console.log(jsEvent)
        },
        editable:false,
    });

Quick look

我想要什么:

当我单击某天时,我想要获取与该天相关的事件(背景)(我的日历中每天只有一个事件)。

当前,我正在使用eventRender + dayClick:

 eventRender: function(event,element){
            if(event.rendering === "background"){
                element.data(event); //store the event data inside the element
            }
        },
 dayClick: function (date, jsEvent, view) {
            console.log(jsEvent)
[...] 
}

通过DayClick上的console.log JSEvent,我知道它让我错了<td>Img

因为,当我尝试使用类<td>获取目标fc-bgevent时,什么都没有发生:

dayClick: function (date, jsEvent, view) {
            console.log(jsEvent)
            if (jsEvent.target.classList.contains('fc-bgevent')) {
                console.log($(jsEvent.target).data());
            }

如果我尝试转到由target获取的HTML元素jsEvent,它会向我显示错误的<td>,而我对此无能为力...

HTML Debug

有人知道如何绕过它吗?

谢谢!

从日期获取一个事件的代码:

function getEventFromDate(date) {
        var allEvents = [];
        allEvents = $('#calendarRoomUnavailable').fullCalendar('clientEvents');
        var event = $.grep(allEvents, function (v) {
            return +v.start === +date;
        });
        if (event.length > 0) {
            return event[0];
        } else {
            return null;
        }
    }

1 个答案:

答案 0 :(得分:0)

在@ADyson注释之后,我的最终函数如下所示:

cp=-1

带有一个小的函数,可获取没有库的格式化日期,例如Moment.js或Date.js

function getEventFromDate(date) {
        var eventToReturn = null;

        $('#calendarRoomUnavailable').fullCalendar('clientEvents', function(event) {
            var event_start = formatDateYmd(new Date(date),'-');
            var date_formated = formatDateYmd(new Date(event.start),'-');

            if(event_start === date_formated) {
                eventToReturn = event;
            }
        });

        return eventToReturn;
    }

我希望找到性能更高的东西,但是这将执行时间除以2。

Keep an eye on it

再次感谢。