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