FullCalendar dayClick js事件未分离

时间:2017-01-13 07:53:01

标签: javascript jquery fullcalendar jquery-click-event

我的网页上有完整日历。日历有事件。在dayClick事件处理程序上,我正在调用一个函数。

问题是第一次点击一天时该功能被调用一次。第二次调用该函数2次,第3次调用3次......依此类推。

我可以猜测问题是日期点击事件没有分离。但我无法解决。

代码:

$('#calendar').fullCalendar({
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
    },
    eventLimit: true,
    defaultView: 'month',
    editable: false,
    eventClick: function (event) {
        if (event.url) {
            window.open(baseUrl + event.url);
            return false;
        }
    },
    dayClick: function (date, allDay, jsEvent, view) {
        var dateString = '';
        dateString = moment(date, 'YYYY-MM-DD').format().split('T')[0];
        $('#popup').modal('toggle');
        $('#popup').on('shown.bs.modal', function () {
        AsyncFn().done(function (result) {
            AnotherAsyncFn(function () {
                SomeFunction();  //This function gets called multiple times                                           
                });
            });                   
        });                        
    }
}); 

我不知道如何分离此事件。可以使用offunbind,但不知道具体如何。 任何人都可以提供一些帮助吗?

2 个答案:

答案 0 :(得分:3)

您应该使用off方法。

$('#popup').on('shown.bs.modal', function () {
    $('#popup').off('shown.bs.modal');
    AsyncFn().done(function (result) {
        AnotherAsyncFn(function () {
            SomeFunction();  //This function gets called multiple times                                           
        });
    });                   
});

答案 1 :(得分:0)

在再次附加活动之前尝试使用jQuery.unbind()

dayClick: function (date, allDay, jsEvent, view) {
    var dateString = '';
    dateString = moment(date, 'YYYY-MM-DD').format().split('T')[0];
    $('#popup').modal('toggle');
    $('#popup').unbind("shown.bs.modal").on('shown.bs.modal', function () {
    AsyncFn().done(function (result) {
        AnotherAsyncFn(function () {
            SomeFunction();  //This function gets called multiple times                                           
            });
        });                   
    });                        
}