#javascript #fullcalendar
#javascript #полный календарь
Вопрос:
Я использую FullCalendar с Javascript, и я хотел бы перетаскивать внешние события в календарь с помощью перетаскиваемого API. Моя проблема в том, что я не знаю, как проверить, не существует ли событие, которое я хотел бы добавить, в один из дней в календаре.
Например, у меня есть список внешних событий [Event1, Event2 ...]
, и в календаре у меня есть день 23-12-2020
с именем события 'Event1'
. Итак, я хотел бы заблокировать пользователя, когда он попытается добавить Event1
в день 23-12-2020
, и разрешить им добавлять это событие туда, куда они хотят.
<div id='external-events'>
<p>
<strong>Draggable Events</strong>
</p>
<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
<div class='fc-event-main'>My Event 1</div>
</div>
<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
<div class='fc-event-main'>My Event 2</div>
</div>
<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
<div class='fc-event-main'>My Event 3</div>
</div>
<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
<div class='fc-event-main'>My Event 4</div>
</div>
<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
<div class='fc-event-main'>My Event 5</div>
</div>
<p>
<input type='checkbox' id='drop-remove' />
<label for='drop-remove'>remove after drop</label>
</p>
</div>
<div id='calendar-container'>
<div id='calendar'></div>
</div>
html, body {
margin: 0;
padding: 0;
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
font-size: 14px;
}
#external-events {
position: fixed;
z-index: 2;
top: 20px;
left: 20px;
width: 150px;
padding: 0 10px;
border: 1px solid #ccc;
background: #eee;
}
#external-events .fc-event {
cursor: move;
margin: 3px 0;
}
#calendar-container {
position: relative;
z-index: 1;
margin-left: 200px;
}
#calendar {
max-width: 1100px;
margin: 20px auto;
}
document.addEventListener('DOMContentLoaded', function() {
var Calendar = FullCalendar.Calendar;
var Draggable = FullCalendar.Draggable;
var containerEl = document.getElementById('external-events');
var calendarEl = document.getElementById('calendar');
var checkbox = document.getElementById('drop-remove');
// initialize the external events
// -----------------------------------------------------------------
new Draggable(containerEl, {
itemSelector: '.fc-event',
eventData: function(eventEl) {
return {
title: eventEl.innerText
};
}
});
// initialize the calendar
// -----------------------------------------------------------------
var calendar = new Calendar(calendarEl, {
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
droppable: true, // this allows things to be dropped onto the calendar
drop: function(info) {
// is the "remove after drop" checkbox checked?
if (checkbox.checked) {
// if so, remove the element from the "Draggable Events" list
info.draggedEl.parentNode.removeChild(info.draggedEl);
}
}
});
calendar.render();
});
function getEvents(date){
all_events.forEach(function(entry) {
if (entry['start'] == date.format()){
alert(entry['title']);}
else if (entry['start'] <= date.format() amp;amp; entry['end'] >= date.format()){
alert(entry['title']);}
});
}
Комментарии:
1. Посмотрите на fullcalendar.io/docs/eventReceive . В этом обратном вызове вы можете просмотреть входящее событие, которое затем позволит вам сравнить его с существующими событиями в вашем календаре, чтобы узнать, хотите ли вы разрешить его или нет. Если вы не хотите его разрешать, есть функция обратного вызова, которую вы можете вызвать, чтобы отменить добавление события.