我想在更改视图之前显示确认框。因此,当用户更改计划程序的日期时,我想显示确认框,确认用户是否要重定向到另一个日期。
答案 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;
});