我遇到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);
}
});
});
}
});
这开始成为我的噩梦。请帮忙!
答案 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。