Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止多次注册事件_Javascript_Jquery_Fullcalendar - Fatal编程技术网

Javascript 防止多次注册事件

Javascript 防止多次注册事件,javascript,jquery,fullcalendar,Javascript,Jquery,Fullcalendar,我使用的是一个库(javascript fullCalendar),它可以用很多选项/事件初始化 当我提交表单时会出现问题,因为我需要某个库事件中的一些参数,所以我将提交事件放在事件中。因此,我: var calendar = $('#calendar').fullCalendar({ .............................. dayClick: function(date, allDay, jsEvent, view) {

我使用的是一个库(javascript fullCalendar),它可以用很多选项/事件初始化

当我提交表单时会出现问题,因为我需要某个库事件中的一些参数,所以我将提交事件放在事件中。因此,我:

    var calendar = $('#calendar').fullCalendar({
    ..............................
        dayClick: function(date, allDay, jsEvent, view) {
            $("#addEvent").submit(function (event) {

            //use date variable

            }
         });
    });

第一次提交正常,但第二次提交触发2x,第三次提交触发3x,依此类推。我如何处理这个问题?我本想创建一个函数,但每次调用该函数时,提交事件都会被注册,并出现相同的问题。

我建议您不要在
dayClick
事件处理程序中绑定
submit
事件处理程序,而可以将
date
存储在缓存中或一个可供以后使用的变量中

var ddate;
var calendar = $('#calendar').fullCalendar({
  dayClick: function(date, allDay, jsEvent, view) {
      ddate = date; //Persist the date
     //OR, Persist the date in cache with element
     //$("#addEvent").data('date', date); 
  })
})


  //Event handler associate at global level
$("#addEvent").submit(function (event) {
    //use date variable
    var date = ddate;
   //var date = $("#addEvent").data('date')
});
就您当前的问题而言,您可以使用删除以前的事件处理程序

    dayClick: function(date, allDay, jsEvent, view) {
        $("#addEvent").off('submit').submit(function (event) {
           //use date variable
        });
     });

您可以在第一次附加事件时“标记”元素,然后在接下来的调用中排除事件的重新附加:

   var calendar = $('#calendar').fullCalendar({
..............................
    dayClick: function(date, allDay, jsEvent, view) {
       $("#addEvent").not('.eventManaged').addClass('eventManaged').submit(function (event) {

        //use date variable

        }
     });
});

希望有帮助

为什么要将日期放在元素上而不仅仅是变量中?为什么不在我将打开的模式上设置数据属性?为什么使用变量而不是元素?请尝试使用
event.stopImmediatePropagation()在函数中,还可以使用.off()解除事件处理程序的绑定