2015-04-07 4 views
1

Bonjour, J'ai commencé à utiliser Dhtmlx scheduler et c'est vraiment cool. Je vérifie le nom de l'événement vide ou le nom de l'événement déjà enregistré dans un objet du planificateur. Je lance une alerte basée sur cette vérification et pour la première fois c'est bon. Lorsque je ferme le planificateur et que j'essaie d'ajouter des événements avec le même nom, l'alerte est affichée plusieurs fois. Sur le suivi du problème, j'ai remarqué que "scheduler.attachEvent (" onEventSave ")" est renvoyé plusieurs fois et donc l'alerte est affichée plusieurs fois. Comment arrêter ces occurrences multiples lors de la sauvegarde d'un seul événement.OnEventSave déclencher plusieurs fois dans dhtmlx scheduler

Mon code:

scheduler.attachEvent("onEventSave",function(id, ev, is_new){ 

     var event_name_array = []; 
     var events_JSON_Array = JSON.parse(scheduler.toJSON()); 
     for(var i = 0; i < events_JSON_Array.length; i++) 
     { 
      var event = events_JSON_Array[i]; 
      event_name_array.push(scheduler.getEvent(event.id).text); 
     } 
     if (!ev.text || (event_name_array.indexOf(ev.text) > -1) && (event_name_array.length > 1)) { 
      alert('Bad input'); 
      return false; 
     } 
     return true; 
    }) 

Merci à l'avance !!!

Répondre

2

Très probablement ce gestionnaire est attaché plusieurs fois. Essayez d'ajouter la vérification comme suit

if(!scheduler._onEventSave){ 
    scheduler._onEventSave = scheduler.attachEvent("onEventSave",function(id, ev, is_new){ 

     var event_name_array = []; 
     var events_JSON_Array = JSON.parse(scheduler.toJSON()); 
     for(var i = 0; i < events_JSON_Array.length; i++) 
     { 
      var event = events_JSON_Array[i]; 
      event_name_array.push(scheduler.getEvent(event.id).text); 
     } 
     if (!ev.text || (event_name_array.indexOf(ev.text) > -1) && (event_name_array.length > 1)) { 
      alert('Bad input'); 
      return false; 
     } 
     return true; 
    }); 
} 

Si vous avez plusieurs événements, vous devrez peut-être faire la même vérification pour tous. Dans ce cas, il serait plus simple de mettre tout attachEvent dans une certaine fonction et de s'assurer qu'il n'est appelé qu'une fois, par ex.

// define handlers here 
scheduler.initAppEvents = function(){ 

    scheduler.attachEvent("onEventSave",function(id, ev, is_new){ 
     .... 
    }); 
    .... 

    // replace self with an empty function after first call 
    scheduler.initAppEvents = function(){}; 
}; 

et faire appel à l'initialisation

scheduler.initAppEvents(); 
0

Vous avez erreur faute de frappe en fonction - oublier ;:

var event_name_array = [] 
alert('Bad input')