如何从FullCalendar中删除此事件?

17

该日历允许用户将时间插槽拖动到日历上,但是如果他们点击它,我希望他们能够将其删除。

因此,在eventClick中,我有以下函数:

function (calEvent) {
  removeRequestedEvent($(this), calEvent);
},

它只是传递日历事件和日历本身。

removeRequestedBooking: function (cal, calEvent) {
    if (!confirm("Delete?"))
        return;

    cal.fullCalendar("removeEvents", calEvent.id);
    cal.fullCalendar("rerenderEvents");

    // Re-show draggable element
    $("#requests #" + calEvent.id).show();
}

我也尝试使用过滤器,但在return语句上设置断点后从未被触发。

    cal.fullCalendar("removeEvents", function (event) {
        return event.id == calEvent.Id;
    });
任何想法?(我知道Id是正确的,并且最后一行有效)。Firebug在javascript中没有显示任何错误。 我正在使用FullCalendar v1.4.10。
6个回答

28

当您所有的id都设置完毕时,请使用Tuan的解决方案。

但是,如果您的事件中没有id,请按照以下方式操作(在设置了id的情况下也适用):

eventClick: function(event){
   $('#myCalendar').fullCalendar('removeEvents',event._id);
}
为什么会出现这个问题? 这种情况的常见原因是在添加新事件时,fullcalendar不会自动添加id。如果是这样,您传递的id将是未定义的。Fullcalendar在尝试使用id删除或过滤时都会使用id。因此,当其值未定义时,它始终返回false。这意味着要删除的元素列表始终为空。

嗨,它运行得非常好。但是我必须删除一个事件,然而我没有任何方法获取内部日历事件ID(又称_id)。由于您可以调用removeEvents并传递一个id或函数,所以我如何在不使用_id的情况下删除?使用函数或其他东西,但我不知道如何操作。 - Baumannzone

8
更简单的方法是:
eventClick: function(calEvent, jsEvent, view) {
    $('#calendar').fullCalendar('removeEvents', function (event) {
        return event == calEvent;
    });
}

这应该是最好的答案,兄弟 =) - whatswrong
这个答案不仅提供了一个很好的解决方案(无需使用任何id!),而且还帮助我们理解如何调用removeEvents(第二个参数可以是返回我们想要删除的事件的函数!) - Lech Osiński

4
使用refetchEvents:
cal.fullCalendar("refetchEvents");

4

你可以尝试使用包含日历的div来调用,而不是使用传递进来的cal参数。

eventClick这种情况下,根据文档所述,this指的是事件的HTML。


3

Justkt的答案让我有点困惑,但我将发布我的结果,以便其他新手能以非常简单的方式查看代码:

eventClick: function(event){
  var event_id = event.id;
  $.post('/Dropbox/finance/index.php/welcome/update', {"event_id": event_id},
      function(data){
          $('#calendar').fullCalendar("removeEvents",  (data));
          $('#calendar').fullCalendar("rerenderEvents");                
        }
      });   
}

PHP(使用CodeIgnighter):

public function update(){
  $result = $this->input->post('event_id');
  echo $result;
  // would send result to the model for removal from DB, or whatever
}

2

我使用带有 event.start 的筛选器函数,它运行良好。

calendar.fullCalendar('removeEvents', function(event) {
  return 
    $.fullCalendar.formatDate(event.start, 'yyyyMMdd') 
    == $.fullCalendar.formatDate(start, 'yyyyMMdd');
});

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