首页 > 解决方案 > javascript保留旧变量

问题描述

我正在使用 JQueryFullCaledar 并编写了一个函数来劫持 eventclick。默认情况下,它只运行以下代码:

var id = event.id;
      $.ajax({
       url:"delete.php",
       type:"POST",
       data:{id:id},
       success:function()
       {
        calendar.fullCalendar('refetchEvents');
        //alert("Event Removed");
       }
      })

我劫持了这个事件,而是打开一个提供三个选项的上下文菜单:

编辑、删除关闭菜单。如果他们选择删除,它将运行与以前相同的功能,但使用 if 语句(由甜蜜警报辅助)来检查他们是否确定。

如果他们选择关闭,它只会关闭菜单

如果他们选择编辑,它会通过 AJAX 将约会的 ID 发送到 PHP 文件,以便我可以更新它。我注意到在更新其中的一堆时,前几次打开后约会不正确。因此,我在运行 AJAX 之前添加了一个捕获来提醒约会的 ID。当我打开我的第一个约会时,我会收到一个带有第一个约会 ID 的警报。我关闭它,然后打开另一个,此时我首先收到带有第一个 ID 的警报,然后是第二个带有新 ID 的警报,然后打开另一个约会给我这两个警报和第三个带有第三个约会 ID 的警报,依此类推。 ..我尝试在单击取消或保存编辑文件时将ID设置为空白,但没有运气。

这是事件点击功能的完整代码:

 eventClick:function(event)
    {

$('.appt_menu').removeClass('hidden').css( {position:"absolute", top:event.pageY, left: event.pageX});

        $('a.close_menu').on("click",function(){
            $('.appt_menu').addClass('hidden');
        })

        $('a.edit_appt').on("click",function(){
            $('.appt_menu').addClass('hidden');

        //show me the ID before sending it via AJAX 
         alert(event.id);  

           $('#modalwindow').load("Form_Edit_Appt.php", {id: event.id}, function(data) { calendar.fullCalendar('refetchEvents');});
$('.backdropper, #modalwindow').addClass('show');


        }); //end of edit appt function

            $('a.delete_appt').on("click",function(){
                $('.appt_menu').addClass('hidden');

     swal({
  title: "Are you sure you want to delete this Appointment?",
  text: "Once deleted, you will not be able to recover this imaginary file!",
  icon: "warning",
  buttons: ["Not that one!", "Yep, delete it!"],
  //buttons: true,
  dangerMode: true,
})
.then((willDelete) => {
  if (willDelete) {
    swal("Your Appointment has been deleted!", {
      icon: "success",
    });

    var id = event.id;
      $.ajax({
       url:"delete.php",
       type:"POST",
       data:{id:id},
       success:function()
       {
        calendar.fullCalendar('refetchEvents');
        //alert("Event Removed");
       }
      })    
  } else {
    swal("Your Appointment has not been removed!");
  }
});
}) 
    },

标签: javascriptphpjqueryevent-calendar

解决方案


每次执行初始 eventClick 时,您都在绑定事件处理程序。每次设置单击处理程序时尝试使用 off() 取消绑定,以便删除任何先前设置的处理程序。

例子:

$('a.edit_appt').off().click(function() {
    //your code
});

推荐阅读