单击作为 Fullcalendar 一部分的"今天"按钮时,我无法让自定义控件工作。
我能找到的所有文档都告诉我,Fullcalendar 的内置控件可以使用两种方法受到影响:
因此,当它应用于上一个,下一个,一个月,议程周和议程日时,这个对我有用,但不适用于"今天"(button.fc-today-button
):
$('body').on('click', 'button.fc-next-button', function() {
console.log('I Clicked Next');
});
一些文档还说这有效,尽管我无法在任何按钮上做到这一点:
$('.fc-next-button span').click(function(){
console.log('I Clicked Next');
});
有谁知道为什么会这样,我做错了什么?
好吧,你想影响"今天"按钮,但你正在为"下一个"按钮添加代码。您想执行以下操作:
$(".fc-today-button").click(function() {
alert('Clicked Today!');
});
这会将单击事件应用于具有类"fc-today-button"(即"今天"按钮将具有的类)的任何内容。
工作示例:
$('#fullCal').fullCalendar({
events: [{
title: 'Event 1',
start: moment().add(1, 'h'),
end: moment().add(2, 'h'),
allDay: false
}],
header: {
left: '',
center: 'prev title next today',
right: ''
},
timezone:'local',
defaultDate: '2014-11-15',
editable: false,
eventLimit: false,
firstDay: 6,
defaultView: 'agendaWeek',
});
$(".fc-today-button").click(function() {
alert('Clicked Today!');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.js"></script>
<div id="fullCal"></div>
经过调查和 MikeSmithDev 的帮助(感谢 Mike - 您的帮助非常宝贵),似乎"今天"事件只有在物理上位于日历下方/之后才会被触发,其余的标题控件(button.fc-next-button
等)似乎并不介意它们的实际位置。
可能在日历完成加载之前执行第一个函数......所以它可以工作,只是没有按钮可以绑定它。
我能够或多或少地通过各种本机解决方法来实现这一点。您可以结合使用"自定义按钮"和"headerToolbar"来有效地删除原始的今天按钮并将其替换为您自己的按钮,该按钮可以在单击时触发自定义函数代码。
我实际上在 VueJS 中使用了它,但对于 Vanilla JS,应该同样可行。
// these are the options you can pass when initializing a fullcalendar
customButtons: {
focusButton: {
text: "focus",
click: this.scrollToCurrentDay // this is a vue component function, but you could just as well pass a vanilla JS function
}
},
headerToolbar: { // this effectively removes the original today button and adds our custom button to the header of the calendar
left: '',
center: 'title',
right: 'prev focusButton next'
}
我想这样做,因为我不仅想关注点击今天的月份,还想将日历滚动到当天(在使用手机等小屏幕时很有用)。
我的自定义今日按钮单击处理程序:
scrollToCurrentDay: function(arg) {
let CalendarAPI = this.$refs.calendar.getApi();
CalendarAPI.today();
var todayElement = document.getElementsByClassName('fc-day-today')[0];
var calendarElement = document.getElementsByClassName('fc')[0];
if (todayElement) {
todayElement.scrollIntoView();
} else {
calendarElement.scrollIntoView();
}
},