在beforeviewchange上在dhtmlx调度程序中显示确认框

时间:2019-06-13 16:50:24

标签: scheduler dhtmlx

我想在更改视图之前显示确认框。因此,当用户更改计划程序的日期时,我想显示确认框,确认用户是否要重定向到另一个日期。

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是使用window.confirm

它将暂停代码执行,直到用户选择任何选项为止,因此您可以使用简单的if-else语句:

scheduler.attachEvent("onBeforeViewChange", function (oldMode, oldDate, mode, date) {
    if (oldMode && oldDate) {
        if (oldMode !== mode || oldDate.valueOf() !== date.valueOf()) {
            if (confirm("are you sure?")) {
                return true;
            }
            return false;
        }
    }

    return true;
});

演示:https://snippet.dhtmlx.com/140d2ff31

如果您希望自定义确认弹出窗口而不阻止浏览器,则您将需要做一个小变通方法,因为调度程序API不支持异步事件处理程序:

1)当代码输入onBeforeViewChange时,您将显示对话框并始终从处理程序返回false,以保持相同的日期

2)当用户确认视图更改时-您将一些标志设置为暂时禁用步骤1,并从回调中调用scheduler.setCurrentView。 onBeforeViewChange再次运行,您检查设置的标志并这次返回true,以允许更改日期。

var callbackViewChange = false;
scheduler.attachEvent("onBeforeViewChange", function (oldMode, oldDate, mode, date) {
    if (oldMode && oldDate) {
        // 
        if (!callbackViewChange && (oldMode !== mode || oldDate.valueOf() !== date.valueOf())) {
            dhtmlx.confirm({
                text: "are you sure?",
                callback: function (result) {
                    if (result) {
                        // set the flag in order to allow view change
                        callbackViewChange = true;
                        scheduler.setCurrentView(date, mode);
                        callbackViewChange = false;
                    }
                }
            });
            // cancel view change while we wait for user action
            return false;
        }
    }
    return true;
});

演示:https://snippet.dhtmlx.com/a2b8b09b9