FullCalendar 3.10 JavaScript更新/删除对话框中如何给开始日期加30分钟
问题说明
你的代码存在以下几个核心错误导致不生效:
- 提交给后端的
eventToUpdate对象中,start字段直接使用了输入框的原始值,没有添加30分钟,后端存储的仍是旧时间,后续refetchEvents拉取数据后会覆盖前端临时修改的内容 - 仅修改了前端
currentUpdateEvent对象的时间,没有和提交给后端的数据同步,前后端数据不一致 - 原注释中的写法逻辑有误:直接调用
val()传参只会修改输入框内容,不能直接生成计算后的Date对象;原生Date的分钟计算需要基于已解析的Date实例,不能直接对输入框字符串做加法
修复后的代码
$('#updatedialog').dialog({ autoOpen: false, width: 680, buttons: { "update": function () { // 先解析开始时间,加30分钟 const originalStart = new Date($("#eventStart").val()); const updatedStart = new Date(originalStart); updatedStart.setMinutes(updatedStart.getMinutes() + 30); // 如果需要结束时间也同步顺延30分钟,可以放开下面的代码 // const originalEnd = new Date($("#eventEnd").val()); // const updatedEnd = new Date(originalEnd); // updatedEnd.setMinutes(updatedEnd.getMinutes() + 30); var eventToUpdate = { id: currentUpdateEvent.id, title: $("#eventName").val(), description: $("#eventDesc").val(), color: $("#colorPicker").val(), start: updatedStart, // 使用加了30分钟的时间 end: new Date($("#eventEnd").val()), // 如果要顺延就改成updatedEnd note: $("#EditEventNote").val() }; // 建议把后续更新日历、关闭弹窗的逻辑放到updateSuccess回调中,避免异步请求未完成就刷新 PageMethods.UpdateEvent(eventToUpdate, updateSuccess); $(this).dialog("close"); currentUpdateEvent.title = $("#eventName").val(); currentUpdateEvent.description = $("#eventDesc").val(); currentUpdateEvent.color = $("#colorPicker").val(); currentUpdateEvent.note = $("#EditEventNote").val(); currentUpdateEvent.start = updatedStart; $('#calendar').fullCalendar('updateEvent', currentUpdateEvent); $('#calendar').fullCalendar('refetchEvents'); } } });
如果你项目中已经引入了Moment.js,可以替换时间计算逻辑,避免原生Date的格式解析、时区问题:
// 用Moment计算加30分钟的时间 const updatedStart = moment($("#eventStart").val()).add(30, 'm').toDate();
内容的提问来源于stack exchange,提问作者ISO
相关产品推荐
相关产品推荐

