Fullcalendar:如何删除事件

8

感谢 StackOverflow 上的另一篇帖子,我在我的“选择”方法中添加了一些代码,以防止用户在此前的日期上添加事件。

缺点是当他们点击空时间槽时,系统会出现警告信息(一个 alert 消息),尝试的事件仍然存在。如何消除它?谢谢!

更新:以下是我的代码:

    select: function(start, end, jsEvent) {

        var check = start._d.toJSON().slice(0,10),
            today = new Date().toJSON().slice(0,10),
            m = moment(),
            url = "[redacted]",
            result = {};
            title = "Class",
            eventData = {
                title: title,
                start: start,
                end: start.clone().add(2, 'hour'),
                durationEditable: false,
                instructorid: 123,
                locationid: 234
            };


        if(check < today) {
            alert("Cannot create an event before today.");

            $("#calendar").fullCalendar('removeEvents', function(eventObject) {
                return true;
            });

        } else {

            $.ajax({ type: "post", url: url, data: JSON.stringify(eventData), dataType: 'JSON', contentType: "application/json", success: function(result) {

                if ( result.SUCCESS == true ) {
                    $('#calendar').fullCalendar('renderEvent', eventData, true);
                    $('#calendar').fullCalendar('unselect');

                } else {

                    alert(result.MESSAGE);
                }

            }});
        }
    }

你能展示一些代码吗? - Laurens
4个回答

15
如果您正在使用FullCalendar V2,您需要使用removeEvents方法
您可以通过以下方式调用它来删除具有特定ID的事件:
$("#calendar").fullCalendar('removeEvents', 123); //replace 123 with reference to a real ID

如果您想使用自己的函数来决定是否删除事件,则可以这样调用:

$("#calendar").fullCalendar('removeEvents', function(eventObject) {
    //return true if the event 'eventObject' needs to be removed, return false if it doesn't
});

我该如何获取要删除的事件ID?这是在select:方法中,根据文档,我的参数是start、end和jsEvent。 - RobG
由于调用removeEvents,FullCalendar将为每个事件对象调用您的回调函数,并将当前事件对象作为参数传递给它,我称之为eventObject。如果您在回调函数中放置console.log(eventObject);而不是我的注释,您将能够看到其内容。根据对eventObject内容的某些检查,您可以返回true或false(true表示删除,false表示保留)。 - leroydev
谢谢......我试了带有回调函数的那个,但它什么都没做。没有错误,但图形事件泡沫仍然在页面上。我需要单独做点什么才能移除它吗? - RobG
更新...实际上它是可以工作的,如果在点击警告框上的“确定”后,您再在页面上其他地方单击一下。然后气泡就会消失。 - RobG

2

FullCalendar有一个removeEvent方法,它在创建事件时使用id

示例 Full Calendar v1:

var calendar = $('#calendar').fullCalendar({ ... stuff ... });
    calendar.fullCalendar( 'addEventSource', {id:123, stuff:'stuff'});
    // ... other calendar things here...
    calendar.fullCalendar( 'removeEvent', 123);

参考 API v1

示例 FullCalendar v2:

var calendar = $('#calendar').fullCalendar({ ... stuff ... });
    calendar.fullCalendar( 'addEventSource', {id:123, stuff:'stuff'});
    // ... other calendar things here...
    calendar.fullCalendar( 'removeEvents', [123]);

参考API v2


这是针对fullCalendar v1的,该方法在fullCalendar v2中不再存在。 - leroydev

2

版本 4.3

        calendar = new Calendar(calendarEl, {
                plugins : [ 'interaction', 'dayGrid', 'list' ],
                header : {
                    left : 'prev,next today',
                    center : 'title',
                    right : 'dayGridMonth,timeGridWeek,timeGridDay,list'
                },
                editable : true,
                droppable : true, 
                eventReceive : function(info) {
                    alert(info.event.title);

                },
                eventDrop : function(info) {
                    alert(info.event.title + " was dropped on "
                            + info.event.start.toISOString());

                    if (!confirm("Are you sure about this change?")) {
                        info.revert();
                    }
                },
                eventClick : function(info) {
                     //delete event from calender
                    info.event.remove();

                }

            });

            calendar.render();
        });

1
完整的日历版本4
如何从日历中删除事件:
<div id="calendar"></div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var calendarEl = document.getElementById('calendar');
    var calendar = new Calendar(calendarEl, {
      events: [
        {
          id: '505',
          title: 'My Event',
          start: '2010-01-01',
          url: 'http://google.com/'
        }
        // other events here
      ],
      eventClick: function(info) {
        info.jsEvent.preventDefault(); // don't let the browser navigate

        if (info.event.id) {
            var event = calendar.getEventById(info.event.id);
            event.remove();
        }
      }
    });
});
</script>

这对我有用。希望这也能帮到你。感谢你提出这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接