Je suis très novice en matière de programmation et de programmation en général, mais j'essaie toujours de réaliser quelque chose ici.Problème d'appel de séquence et de fonction jQuery
J'utilise Fullcalendar pour permettre aux utilisateurs de mon application Web d'insérer un événement dans la base de données. Le clic sur un jour, l'affichage change à agendaDay, puis à un moment de la journée, et une boîte de dialogue s'ouvre avec un formulaire. J'essaie de combiner valider (pré-jquery.1.4), jquery.form pour poster le formulaire sans rafraîchir la page
Le script calendar.php, inclus dans plusieurs pages, définit l'objet fullcalendar et l'affiche dans un div:
$(document).ready(function() {
function EventLoad() {
$("#addEvent").validate({
rules: {
calendar_title: "required",
calendar_url: {
required: false,
maxlength: 100,
url: true
}
},
messages: {
calendar_title: "Title required",
calendar_url: "Invalid URL format"
},
success: function() {
$('#addEvent').submit(function() {
var options = {
success: function() {
$('#eventDialog').dialog('close');
$('#calendar').fullCalendar('refetchEvents');
}
};
// submit the form
$(this).ajaxSubmit(options);
// return false to prevent normal browser submit and page navigation
return false;
});
}
});
}
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
theme: true,
firstDay: 1,
editable: false,
events: "json-events.php?list=1&<?php echo $events_list; ?>",
<?php if($_GET['page'] == 'home')
echo "defaultView: 'agendaWeek',";
?>
eventClick: function(event) {
if (event.url) {
window.open(event.url);
return false;
}
},
dayClick: function(date, allDay, jsEvent, view) {
if (view.name == 'month') {
$('#calendar').fullCalendar('changeView', 'agendaDay').fullCalendar('gotoDate', date);
}else{
if(allDay)
{
var timeStamp = $.fullCalendar.formatDate(date, 'dddd+dd+MMMM_u');
var $eventDialog = $('<div/>').load("json-events.php?<?php echo $events_list; ?>&new=1&all_day=1×tamp=" + timeStamp, null, EventLoad).dialog({autoOpen:false,draggable: false, width: 675, modal:true, position:['center',202], resizable: false, title:'Add an Event'});
$eventDialog.dialog('open').attr('id','eventDialog');
}
else
{
var timeStamp = $.fullCalendar.formatDate(date, 'dddd+dd+MMMM_u');
var $eventDialog = $('<div/>').load("json-events.php?<?php echo $events_list; ?>&new=1&all_day=0×tamp=" + timeStamp, null, EventLoad).dialog({autoOpen:false,draggable: false, width: 675, modal:true, position:['center',202], resizable: false, title:'Add an Event'});
$eventDialog.dialog('open').attr('id','eventDialog');;
}
}
}
});
});
le script JSON-events.php contient la forme et aussi le code pour traiter les données du formulaire soumis.
Qu'est-ce qui se passe quand je teste la chose:
- premier utilisateur clique un jour, alors le temps de la journée. Popup s'ouvre avec l'heure et la date indiquées sur le formulaire. Lorsque l'utilisateur soumet le formulaire, la boîte de dialogue se ferme et le calendrier actualise ses événements .... et l'événement ajouté par l'utilisateur apparaît plusieurs fois (de 4 à 11 fois!). Le formulaire a été traité plusieurs fois par le script PHP de réception ?!
- deuxième l'utilisateur clique, la fenêtre contextuelle s'ouvre, l'utilisateur soumet un formulaire vide. Le formulaire est soumis (validation de la fonction non déclenchée) et l'utilisateur redirigé vers la page vide json-events.php (ajaxForm non déclenché non plus)
Évidemment, mon code est faux (et sale aussi, désolé). Pourquoi le formulaire soumis, soumis plusieurs fois à la réception du script et pourquoi la fonction javascript EventLoad n'est déclenchée qu'une seule fois?
Merci beaucoup pour votre aide. Ce problème me tue!
Merci pour votre réponse. J'ai appliqué cette modification dans le code. Le formulaire n'est plus soumis au script de réception. L'autre problème, lors de l'ouverture de la fenêtre contextuelle une deuxième fois "valider" et "ajaxSubmit" ne sont pas déclenchés, est toujours là. P.S. J'utilise toujours jQuery 1.3.2 – Jonas
Hmmm. Cela peut avoir un rapport avec la fonction EventLoad appelée avant de créer la boîte de dialogue. Avez-vous essayé de l'exécuter dans le gestionnaire d'événements open dialog? La boîte de dialogue peut supprimer les éléments d'origine (et leurs gestionnaires) dans 1.3. – tvanfosson
:(J'ai déjà essayé d'appeler la fonction EventLoad dans le gestionnaire d'événements open dialog sans avoir de chance.J'ai essayé de placer la fonction EventLoad à l'intérieur de la méthode de chargement sans aucune chance non plus.Je dois admettre que je ne comprends pas exactement – Jonas