如何在单击上一个和下一个按钮时调用事件?

问题描述 投票:0回答:18

jQuery fullcalendar 中,我们有上一个和下一个按钮。我们如何在单击这些按钮时调用一些事件?

javascript jquery fullcalendar
18个回答
39
投票

最好的方法是:

viewRender: function(view, element) {
  var b = $('#calendar').fullCalendar('getDate');
  alert(b.format('L'));
},

32
投票

您可以简单地将事件附加到按钮:

$('.fc-button-prev span').click(function(){
   alert('prev is clicked, do something');
});

$('.fc-button-next span').click(function(){
   alert('nextis clicked, do something');
});

18
投票

这对我有用:

$('body').on('click', 'button.fc-prev-button', function() {
  //do something
});

$('body').on('click', 'button.fc-next-button', function() {
  //do something
});

12
投票

当您单击它们时,会触发 viewRender 事件。您也可以在其中添加您的代码。

$('#calendar').fullCalendar({
    viewRender: function(view, element) {
        //Do something
    }
});

12
投票

我看到还有其他有效的答案,但恕我直言,最简单、更正确的 - 至少使用 FullCalendar v.4 - 是拦截

prev
next
是以与自定义按钮相同的方式处理它们。

这是我的设置(使用 toastr 仅用于演示目的)

document.addEventListener('DOMContentLoaded', function() {
  var calendarEl = document.getElementById('calendar');

  var calendar = new FullCalendar.Calendar(calendarEl, {
    plugins: [ 'dayGrid', 'timeGrid' ],
    header: {
      left: 'dayGridMonth,timeGridWeek,timeGridDay',
      center: 'title',
      right: 'prev,next'
    },
    footer: {
      left: '',
      center: '',
      right: 'prev,next'
    },
    customButtons: {
      prev: {
        text: 'Prev',
        click: function() {
                    // so something before
                    toastr.warning("PREV button is going to be executed")
                    // do the original command
                    calendar.prev();
                    // do something after
                    toastr.warning("PREV button executed")
        }
      },
      next: {
        text: 'Next',
        click: function() {
                    // so something before
                    toastr.success("NEXT button is going to be executed")
                    // do the original command
                    calendar.next();
                    // do something after
                    toastr.success("NEXT button executed")
        }
      },
    }
  });

  calendar.render();
});

在此处查看Codepen


10
投票

全日历版本 5 中的解决方案:

如果您使用的是 FullCalendar 版本 5,我建议您使用

datesSet
而不是使用
.click()

datesSet: function() {
    myFunction();
}

每次更改或初始化日历的日期范围时都会调用

myFunction()
。换句话说,当您单击日历中提供的上一个/下一个按钮时,日历的日期范围将被更改,并且
myFunction()
将被调用。

参考:https://fullcalendar.io/docs/datesSet

如果你真的想采用

.click()
方式,以下代码适用于 FullCalendar 版本 5。

$('.fc-prev-button').click(function(){
    myFunction();
});

$('.fc-next-button').click(function(){
    myFunction();
});

这两种方法在我的项目(FULLCALENDAR 版本 5)中都非常有效,希望这可以帮助那些正在解决这个问题的人。


9
投票

当单击 nextprevious 按钮时,将调用 events 函数。这是加载当年数据的示例:

$(document).ready(function() {
  loadCal();
});

function loadCal() {

  var current_url = '';
  var new_url = '';

  $('#calendar').fullCalendar({

    // other options here...

    events: function(start, end, callback) {

      var year = end.getFullYear();

      new_url = '/api/user/events/list/' + id + '/year/' + year;

      if (new_url != current_url) {

        $.ajax({
          url: new_url,
          dataType: 'json',
          type: 'POST',
          success: function(response) {

            current_url = new_url;
            user_events = response;

            callback(response);
          }
        })
      } else {
        callback(user_events);
      }
    }
  })
}

在查询中检索结果时,请确保至少包含上一年的最后 10 天和下一年的前 10 天。


5
投票

版本3答案是使用:

viewRender: function (event, element, view){
// you code here
}

版本 4https://fullcalendar.io/docs/v4/datesRender

datesRender: function (){
    // you code here
    }

https://fullcalendar.io/docs/v4/upgrading-from-v3

viewRender 重命名为datesRender。参数已更改。”


版本 5 使用:

datesSet: function (){
    // you code here
    }

datesRender更改为:datesSet - 从datesRender重命名。在视图的日期初始化或更改时调用。” https://fullcalendar.io/docs/upgrading-from-v4


2
投票

另一个解决方案是定义自定义上一个/下一个按钮:

$('#m_calendar').fullCalendar({
 header: {
         left: 'customPrevButton,customNextButton today',
         center: 'title',
 },
 customButtons: {
                customPrevButton: {
                    text: 'custom prev !',
                    click: function () {
                        alert('custom prev ! clicked !');

                    }
                },
                customNextButton: {
                    text: 'custom ext!',
                    click: function () {
                       alert('custom ext ! clicked !');
                    }
                },
            }
});

1
投票

只是一个快速更新,不知道需要多长时间,但接受的答案对我来说是这样的:

$('.fc-prev-button').click(function(){
   alert('prev is clicked, do something');
});

$('.fc-next-button').click(function(){
   alert('nextis clicked, do something');
});

注意细微的变化,

今天点击如下:

$(".fc-today-button").click(function () {

希望我能帮助别人。


1
投票

在事件中声明日历时,您可以编写事件的回调函数:

$('#calender').fullCalendar({

events:  function (start, end, timezone, callback) {
                    callback(eventsarray);
                }
});

//eventsarray - 这是日历数据的集合。您还可以通过传递所选/当月的第一个和最后一个日期来调用月份明智的函数,并处理上一个和下一个事件。


0
投票
$('.fc-button-next span').click(function(){

   //do your work 

});


$('.fc-button-prev span').click(function(){

   //do your work 

});

0
投票

代替

click
使用
on

$('body').on('click', '.fc-prev-button', function() {
});

$('body').on('click', '.fc-next-button', function() {
});

当您的日历可以在任何时间点动态初始化时,这非常有用。


0
投票

如果您没有通过上述答案,请尝试以下操作:

$('span.fc-button.fc-button-prev.fc-state-default.fc-corner-left').click(function() {
    alert('prev is clicked, do something');
});

$('span.fc-button.fc-button-next.fc-state-default.fc-corner-right').click(function() {
    alert('next is clicked, do something');
});

0
投票

完整日历 v3.4.0

上一个,下一个。今天、周、月按钮:

$(document).ready(function(){

$('#mycalendar').fullCalendar({


$('.fc-prev-button').click(function(){
        alert("Clicked prev button");
    });

    $('.fc-next-button').click(function(){
        alert("Clicked next button");
    });

    $('.fc-today-button').click(function(){
        alert('Today button clicked, do something');
    });

    $('.fc-listWeek-button').click(function(){
        alert('list week clicked, do something');
    });

    $('.fc-listMonth-button').click(function(){
        alert('list month clicked, do something');
    });

});

});

0
投票

版本 6
为什么不是一个相当有效、更全球化的解决方案,只需很少的代码......纯 js

document.querySelectorAll(('.fc-button')).forEach(button => {
    button.onclick = () => 'do something...'
})

0
投票

您可以使用 customButtons 来获取事件点击或更改按钮图标,如下面的代码:

$('#fullcalendar').fullCalendar({
    themeSystem: 'jquery-ui',
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,listMonth'
    },
    height: 'auto',
    editable: false,
    eventSources: [],
    showNonCurrentDates: false,
    fixedWeekCount: false,

    // custom button
    customButtons: {
        prev: {
            // text: 'Prev', // you can choose to use text or icon to your button
            icon: 'left-single-arrow',
            click: function() {
                console.log('Prev');
            }
        },
        next: {
            // text: 'Next', // you can choose to use text or icon to your button
            icon: 'right-single-arrow',
            click: function() {
                console.log('Next');
            }
        },
    }
});

$('#fullcalendar').fullCalendar('render');

0
投票

events: function() {
     $.ajax({
          url: window.location.origin  + '/calendar/get_workschedule',
          type: "POST",
          headers: {
              'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          },
          data:  {
              month : $('#calendar').fullCalendar('getDate').month(),
              year : $('#calendar').fullCalendar('getDate').year(),
          },
          success: function(data) {
              var schedules=[];
              $.each(data, function(key, value){
                  schedules.push({
                      'title' : value.title,
                      'start' : new Date(value.year, value.month, value.day),
                      'backgroundColor': [value.bgColor]
                  })
              })

              $('#calendar').fullCalendar('removeEvents');
              $('#calendar').fullCalendar('addEventSource', schedules);         
              $('#calendar').fullCalendar('rerenderEvents' );
          }
      });
 }

© www.soinside.com 2019 - 2024. All rights reserved.