1

我遇到了 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);
                  }
                });
              });
            }
        });

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

4

1 回答 1

0

在我看来,onclick事件侦听器有问题#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事件处理程序绑定到按钮一次,而不是每次单击事件时。我还分配了一个event_id保存当前事件 id 值的变量。

现在来解释一下。你说:

一切都很好,直到我改变主意并且不想编辑此事件而是另一个事件。

当你点击一个事件时会发生什么?

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

在这里阅读一下 JavaScript 如何处理事件绑定可能值得一读。

于 2013-05-11T20:40:43.850 回答