【问题标题】:fullcalendar.io - Holding Event in memoryfullcalendar.io - 在内存中保持事件
【发布时间】:2018-02-09 07:49:13
【问题描述】:

我相信 javascript 会在内存中保存该事件,但我不知道在哪里以及如何绕过它。也许你们可以帮忙。我创建了一个 JSFiddle 来演示这个问题

JSFIDDLE

所以当您更新一个事件时就会发生这种情况。然后你移动到另一个事件去更新那个事件。它将旧事件带到新事件中。改变开始和结束以及一切。第一个事件更新正常。

当你点击事件时。这些函数被触发。

function eventClick(calEvent){
    $('#edit-event-title').val(calEvent.code);
    $('#edit-event-description').val(calEvent.description);
    $('#event-start-edit-dpick').data('DateTimePicker').date(calEvent.start).format('YYYY-MM-DD');
    $('#event-start-time-edit-dpick').data('DateTimePicker').date(calEvent.start).format('HH:mm');
    $('#event-end-edit-dpick').data('DateTimePicker').date(calEvent.end).format('YYYY-MM-DD');
    $('#event-end-time-edit-dpick').data('DateTimePicker').date(calEvent.end).format('HH:mm');
    $('#fc_edit').click();
}


function createUpdateEvent(calEvent, create) {
        //create event
        if(create){
            // create the event
        } else {
            $(".antosubmit2").on("click", function() {
                calEvent.code = $("#edit-event-title").val();
                calEvent.title = $("#edit-event-title option:selected").html();
                calEvent.description = $("#edit-event-description").val();
                calEvent.start = moment($('#event-start-edit-dpick').data('DateTimePicker').date().format('YYYY-MM-DD') + ' ' +
                $('#event-start-time-edit-dpick').data('DateTimePicker').date().format('HH:mm') +
                $('#event-start-edit-dpick').data('DateTimePicker').date().format('Z'));
                calEvent.end = moment($('#event-end-edit-dpick').data('DateTimePicker').date().format('YYYY-MM-DD') + ' ' +
                $('#event-end-time-edit-dpick').data('DateTimePicker').date().format('HH:mm') +
                $('#event-end-edit-dpick').data('DateTimePicker').date().format('Z'));
                calendar.fullCalendar('updateEvent', calEvent);

                $('.antoclose').click();
            });
        }

    }

function recalcHeaderHours(event){
        var currentday = moment(event.start).format("YYYY-MM-DD");
        if (event.totalHours > 0) {
            var prev = $("#dailytotal-"+currentday).text() || 0;
            $("#dailytotal-"+currentday).text(+prev + +event.totalHours);
        }
    }

希望各位大神帮忙。谢谢你的时间:)

【问题讨论】:

  • 对不起,我不明白你真正的问题是什么,在哪里。
  • 转到 JSFiddle。点击一个事件。编辑它。例如更改代码。点击保存。然后去参加另一个活动。更改它的代码。单击保存。看看会发生什么。

标签: javascript jquery fullcalendar momentjs bootstrap-datetimepicker


【解决方案1】:

我解决了你的问题。 问题是您将 on click 事件放在第 83 行中的“.antosubmit2”中。在第一个事件打开时,将对此类进行 1 次单击,但在 2. 事件打开时,代码再次单击它。如果你只打开一个事件2次,就没有问题。但是,如果您在不同的事件上执行此操作,则在第二次打开时,会触发 2 次单击。新添加的点击使用正确的数据,但第一次点击使用第一个事件数据。我猜这是你的问题。 第一次点击应该与“.antosubmit2”解除绑定。 尝试像这样修改您的代码:

function createUpdateEvent(calEvent, create) {
    //create event
    if(create){
        // create the event
    } else {
        $(".antosubmit2").unbind('click');
        $(".antosubmit2").on("click", function() {...

您会看到“unbind('click')”行,将其添加到代码中即可。

【讨论】:

  • 非常感谢您的时间、解释和代码修复。我终于可以重新开始工作,将这个东西连接到我的数据库:)
  • 不客气。 :) 祝你有美好的一天。
猜你喜欢
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2011-04-13
相关资源
最近更新 更多