【问题标题】:FullCalendar : Ignore events during selectFullCalendar :在选择期间忽略事件
【发布时间】:2015-10-16 13:04:09
【问题描述】:

我使用 fullCalendar month view 创建了一个月历。

在我的日历上,我每天只显示一个事件。该事件用于显示用户状态(可用、不可用、忙碌...)

因为我每天总是有 1 个事件,所以我将 eventLimit 设置为 true 以避免发生多个事件,并且因为此事件大约是一整天,所以我还将 editable 设置为 false 以防止事件发生' 拖放。

这是我的代码:

$('#calendar').fullCalendar({
    editable: false, // Prevent event drag & drop
    events: '/json/calendar', // Get all events using a json feed
    selectable: true,
    eventLimit: true, // Only 1 event per day
    header: {
        left: 'prev,next',
        center: 'title',
        right: 'today'
    },
    select: function(start, end) {
        window.location.hash = '#oModal-calendar'; // Display some popup with a form
        end.subtract(1, 'days');
        $('#checkboxButton').data('start', start);
        $('#checkboxButton').data('end', end);
        $('#calendar').fullCalendar('unselect');
    }
});

我希望我的用户能够直接从日历中选择日期,因此我在日历选项中设置了selectable: true。但是,我收到很多反馈说“它没有用”。
经过一番调查,我发现用户经常点击事件块而不是日期。
因为默认情况下事件是可拖动的,所以单击事件不会触发选择,并且因为我已将 editable 设置为 false,它不再执行任何操作。
这种组合导致我的用户认为存在错误。


我希望 fullCalendar 选择能够像日历上没有事件一样工作。我怎样才能实现这种行为?

编辑:这是基于完整日历示例和我的代码的jsfiddle

【问题讨论】:

    标签: javascript jquery fullcalendar


    【解决方案1】:

    我终于找到了解决办法。

    FullCalendar 事件的点击绑定到 css 类 fc-day-grid-event

    可以用一条 css 行 pointer-events: none; 简单地忽略它。

    .fc-day-grid-event {
      pointer-events: none;
    }
    

    Jsfiddle 已更新。

    【讨论】:

    • 我花了几个小时研究 JS 试图弄清楚如何处理这个问题。尝试了各种提议的解决方案和我自己的大量 hacky 尝试。这就是全部...谢谢(6 年后)!
    【解决方案2】:

    执行此操作的一种方法是允许用户通过eventClick 回调单击事件,但当他们单击它们时会通过 FullCalendar 的 API $('#calendar').fullCalendar('select', start, end) 触发“选择”功能。

    我使用相关代码更新了您的 jsfiddle 示例。

    HTML

    <div id="calendar"></div>
    

    Javascript

    $('#calendar').fullCalendar({
        editable: false, // Prevent event drag & drop
        defaultDate: '2015-02-12',
        events: [{
            title: 'All Day Event',
            start: '2015-02-01'
        }, {
            title: 'Lunch',
            start: '2015-02-12T12:00:00'
        }],
        selectable: true,
        eventLimit: true, // Only 1 event per day
        header: {
            left: 'prev,next',
            center: 'title',
            right: 'today'
        },
    
        select: function (start, end) {
            var title = prompt('Event Title:');
            var eventData;
            if (title) {
                eventData = {
                    title: title,
                    start: start,
                    end: end
                };
                $('#calendar').fullCalendar('renderEvent', eventData, true); // stick? = true
            }
            $('#calendar').fullCalendar('unselect');
        },
        eventClick: function(calEvent, jsEvent, view) {
            var start = calEvent.start;
            var end = calEvent.end;
            $('#calendar').fullCalendar('select', start, end);
        }
    });
    

    【讨论】:

    • 虽然它适用于简单的单击,但您不能单击事件并拖动鼠标一次选择多天。我真的很想“忽略事件”。
    • 我明白了。 FullCalendar 的文档中似乎没有任何内容可以帮助解决该问题。为什么不把光标改成“cursor: no-drop;”所以用户知道不要点击事件数据?或者让事件不那么具有侵入性,让用户不想点击它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多