Event Object在完整日历中保存以前的事件属性

时间:2013-05-10 11:41:16

标签: ajax fullcalendar

我遇到FullCalendar的问题,我一直在寻找解决方案而没有任何成功。 我使用eventClick打开包含当前事件数据的叠加表单。一切都很好,直到我改变主意,不想再编辑这个事件。这导致ajax发送请求2次,一次用于打开事件(已准备好编辑但表单未提交),一次用于真正编辑和提交的事件。

$('#sc-calendar').fullCalendar({
    eventClick: function(event) {   
       //opening overlay form window
              $('#submit-event-update').bind('click',function() { //click submit
                $.ajax({
                  type: "GET",
                  url: "event_update",
                  data: "id="+event.id+"&title="+event.title+"&start="+event.start+"&end="+event.end,
                  cache: false,
                  success: function() {
                    $('#submit-event-update').unbind();
                    $('#sc-calendar').fullCalendar('updateEvent',event);
                  }
                });
              });
            }
        });

这开始成为我的噩梦。请帮忙!

1 个答案:

答案 0 :(得分:0)

在我看来,onclick的{​​{1}}事件监听器存在问题。

您应该以这种方式修改代码:

#submit-event-update

我更改了它,以便您只需将$('#sc-calendar').fullCalendar({ eventClick: function(event) { //opening overlay form window //Assign the event id of this event to the global variable event_id event_id = event.id; } }); $('#submit-event-update').bind('click',function() { //click submit $.ajax({ type: "GET", url: "event_update", data: "id=" + event_id + ..., //Note how event.id is not used anymore cache: false, success: function() { $('#sc-calendar').fullCalendar('updateEvent',event); } }); }); 事件处理程序绑定到按钮一次,而不是每次单击一个事件。我还指定了一个变量onclick,它保存当前事件id的值。

现在,为了解释。你说:

  

在我改变主意并且不想编辑之前,一切都很有效   这个事件,但另一个。

点击某个活动后会发生什么?

您将event_id事件绑定到onclick。现在,如果你单击按钮,那么你将进入AJAX调用的#submit-event-update回调,然后取消绑定按钮。但是,如果你改变主意并且不点击提交按钮怎么办?现在,您有一个success()侦听器,旧数据已绑定到该按钮。当您选择另一个事件时,您有两个事件监听器绑定到同一个按钮,因此,一个AJAX请求被发送两次

可能值得一读的是JavaScript如何处理事件绑定here