1

嗨,我开始使用 Dhtmlx 调度程序,它真的很酷。我正在检查已保存在调度程序对象中的空事件名称或事件名称。我基于此检查发出警报,这是第一次很好。当我关闭调度程序并尝试添加具有相同名称的事件时,会多次显示警报。在跟踪问题时,我注意到“scheduler.attachEvent(“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;
    })

提前致谢!!!

4

2 回答 2

2

很可能这个处理程序被附加了好几次。尝试添加如下检查

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;
    });
}

如果您有多个事件,则可能需要对所有事件进行相同的检查。在这种情况下,将所有 attachEvent 放在某个函数中并确保它只调用一次会更简单,例如

// 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(){};
};

并调用初始化

scheduler.initAppEvents();
于 2015-04-07T13:50:45.303 回答
0

您在功能上有拼写错误 - 忘记;

var event_name_array = []
alert('Bad input')
于 2015-04-07T12:22:29.267 回答