Well, finally, I got the answer to my question. I had to call the fullCalendar function in the ajax success function. I mentioned this below:
var eventArr = []; var eventData1 ; $.ajax({ url: loadDataUrl, datatype: 'json', type: 'GET', success: function(data) { eventArr = data; eventData1 = eventArr; console.log("event data == == "+eventData1); //Full calendar library. $('#calendar').fullCalendar({ header: { left : 'prev,next', center : 'title', }, defaultView: 'month', defaultDate: today, selectable: true, selectOverlap : false, navLinks: true, // can click day/week names to navigate views selectHelper: true, events: eventData1, //This will load the events select: function(start, end,jsEvent,view) { console.log("View == = = ="+view); var check = moment(start, 'DD.MM.YYYY').format('YYYY-MM-DD'); var today = moment(new Date(), 'DD.MM.YYYY').format('YYYY-MM-DD'); alert('Current view: ' + view.name); if(check < today) { // Previous Day. show message if you want otherwise do nothing. // So it will be unselectable alert("cant select previous dates!"); $('#calendar').fullCalendar('unselect'); } else { var title = 'Availability'; var eventData; if (title) { eventData = { title: title, start: start }; $('#calendar').fullCalendar('renderEvent', eventData, true); // stick? = true sendData(start); } $('#calendar').fullCalendar('unselect'); } }, eventClick: function(calEvent, jsEvent, view) { /** * calEvent is the event object, so you can access it properties */ if(confirm("Are you sure you want to delete the event " + calEvent.title + " ?")) { // deleteTempAvailability(calEvent.start._d,calEvent.end._d); deleteTempAvailability(calEvent.start._d); // delete in frontend $('#calendar').fullCalendar('removeEvents', calEvent._id); } }, editable: false, eventLimit: true, // allow "more" link when too many events }); }, failure: function(err) { alert("error == "+err); } });
And so that the user can add only one event per day. All I did was set from selectOverlap to false .
source share