J'utilise FullCallendar et Jquery. J'ai fait un google calendrier comme interface et tire des événements à partir d'un fichier json. Lorsqu'un utilisateur clique sur un jour où un div s'ouvre pour les saisir, cliquez sur Ajouter un événement et l'événement est ajouté. Au second clic, lorsque l'utilisateur clique sur ajouter un événement, deux événements sont ajoutés, un le premier jour sur lequel vous avez cliqué et le second le jour sélectionné. Au troisième clic, 3 événements sont ajoutés et ainsi de suite. Voici le code: var c = 0;Lors de l'ajout d'événements à FullCalendar, ils sont dupliqués - plusieurs appels effectués pour ajouter un événement sans cause
function cleanEventBubble(){
$('#event').hide();
$('td').removeClass('selDay');
$('#eventDate').text('');
$('#calEvent,input:text').val('');
}
function createEvent(date, allDay, jsEvent, View, selCell){
//Clean the event bubble and calendar
cleanEventBubble();
$(selCell).addClass('selDay');
$('#eventDate').append(date.toDateString());
$('#event').css('left', jsEvent.pageX);
$('#event').css('top', jsEvent.pageY);
$('#event').show();
$('#btnAddEvent').click(function(){addEvent(date, $('#title').val(), c)});
}
function addEvent(date, title, id){
$.ajax({
type:'get',
<cfoutput>url: '#strURL#'</cfoutput>,
data:{
method:'addEvent',
user:1,
title:title,
allDay:'true',
start:$.fullCalendar.formatDate(date, 'yyyy-MM-dd')
},
dataType: 'json',
success: function(data, status){alert('response: ' + data);},
error: function(data){$('#returnMess').html(data);}
});
$('#calendar').fullCalendar('refetchEvents')
cleanEventBubble();
}
/**/
function removeEvent(id){
$('#calendar').fullCalendar('removeEvents', id);
}
function updateEvent(id, title){
var event = $('#calendar').fullCalendar('clientEvents', id);
event.title = title;
$('#calendar').fullCalendar('updateEvent', event);
}
$(document).ready(function() {
//Create JQuery connection to obj
$('#event').hide();
//Make event bubble draggable
$('#event').draggable();
$('#evBubbleClose').click(cleanEventBubble);
// page is now ready, initialize the calendar...
$('#calendar').fullCalendar({
// put your options and callbacks here date, allDay, jsEvent, view
dayClick:function(date, allDay, jsEvent, view){
createEvent(date, allDay, jsEvent, view, this);
},
<cfoutput>events: '#strURL#'+'?wsdl&method=getEvents'</cfoutput> ,
theme: true,
header: {left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay' },
editable:true
});
//$('#calendar').fullCalendar('renderEvents');
});
en fait la méthode createEvent ne montre qu'un div qui a une forme de Définir les propriétés de l'événement. Il y a un bouton sur la div qui, lorsqu'il est cliqué, ajoute l'événement à la base de données et appelle la méthode refetchEvents. Ce que je pense est en train de se passer, c'est que la mémoire n'est pas effacée, donc au deuxième clic sur le calendrier jsevent arrive deux fois. Au troisième clic, cela arrive 3 fois, etc. J'ai vu la sortie et cela montre que la mémoire n'est pas effacée de l'événement précédent et se reproduit ainsi. Quelque chose comme ça de toute façon. J'ai mis en place un drapeau qui ne permet pas à l'événement de tirer plus d'une fois. – kevin