fullcalendar 通过弹出模式奇怪行为删除事件

fullcalendar remove event by popup modal strange behavior

我已将全日历事件移除弹出模式。 这部分工作但有奇怪的行为。 我是新手,所以我尝试了几种不同的方法,但我无法消除这种奇怪的行为。 而且我不知道如何让 jsfiddle 在不复制我的所有代码的情况下重现确切的行为。但我的代码包含很多额外的东西。所以我不能提供jsfiddle。这里只说明相关代码。但我认为有人对此有很好的经验。我认为他们可以轻松地看穿代码。非常感谢您的建议。我在这上面花了太多时间。 奇怪的行为是事件通过弹出模式删除,它删除了之前通过关闭按钮关闭的其他事件。在下面的解释中包含了细节。

我做了这样的:

1) div 弹出模式代码

<div class="modal fade" id="modalRemove" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
      </div>
      <div class="modal-body">
       <h4>Are you sure to remove the event?</h4>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" id="close" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-danger" id="removeBtn" data-dismiss="modal">Remove</button>
      </div>
    </div>
  </div>
</div>

2) 单击事件时 -> 弹出模式显示 -> 然后可以选择(单击)关闭按钮或删除弹出模式上的按钮

eventRender: function (event, element){  
    element.click(function() {
        $('#modalRemove').modal();
        $('#eventTitle').html(event.title);
        $("#removeBtn").click(function() {  
             $('#calendar').fullCalendar('removeEvents',event._id); 
        });
    });
},

什么有效

  1. 弹出模式正在工作
  2. 关闭按钮,删除按钮有效
  3. 在弹出模式中按下移除按钮时事件被移除

什么是奇怪的行为

  1. 假设有两个事件:test1、test2 (image1)

  1. 我点击了 test1 事件,然后弹出模式出现(图片 2)

  1. 然后,我在 test1 的弹出窗口上单击关闭按钮(不删除)-> 弹出窗口消失了 -> test1 事件仍然在 fullcalendar 上,因为它应该是。 ====> 直到这里工作正常

  2. 然后,我点击 test2 事件 -> 弹出模式出现像图像 2 -> 按下测试 2 的删除按钮 -> [问题]然后 test1,test2 事件都被删除

为什么它会在 1、2、3、4 步后删除这两个事件?

试试这个:

eventRender: function(event, element) {
  element.attr('href', 'javascript:void(0);');
  element.click(function() {
    //set the modal values and open
    $('#eventTitle').html(event.title);

    // Rebind the Remove button click handler
    $("#removeBtn").off('click').on('click', function(e) {
        $('#calendar').fullCalendar('removeEvents', event._id);
    });

    $('#modalRemove').modal();
  });
}

注意所有 click 事件是如何在绑定特定事件之前通过 off()#removeBtn 按钮解除绑定的。

(在您的代码中,每次单击日历中的事件时,此事件的新 click 处理程序都会绑定到 #removeBtn。因此,当您最终单击 "Remove" 多个处理程序时被处决了。)

你可以这样做

$(".popover").hide();