技术需求:选择日期后不关闭Datepicker,仅允许通过按钮关闭并添加提示
实现Datepicker选择日期后不自动关闭并添加关闭确认提示
要满足你的需求,需要对现有代码做两处核心修改:阻止日期选择后自动关闭对话框,以及给关闭按钮添加确认提示逻辑。以下是修改后的完整代码:
var arrDay = ""; var departDay = ""; var inserted_date2 = false; // 确保变量已定义 halfDates = [ @foreach ($shifts as $shift) (new Date('{{ $shift }}')).toDateString(), @endforeach ]; fullDays = [ @foreach ($fullDays as $day) (new Date('{{$day}}')).toDateString(), @endforeach ]; // 覆盖默认的Datepicker隐藏方法,仅允许通过自定义按钮关闭 var originalHide = $.datepicker._hideDatepicker; $.datepicker._hideDatepicker = function(input) { if (window.allowDatepickerClose) { originalHide(input); window.allowDatepickerClose = false; } }; $(".js-ui-datepicker").focus(function(){ $(".js-ui-datepicker") .datepicker({ minDate: 0, showButtonPanel: true, beforeShowDay: function(day){ if (halfDates.includes(day.toDateString())) { return [true, 'halfDay', '你可以选择半天,其余时段已被预订']; }else if(fullDays.includes(day.toDateString())){ return [false,'fullDay', "该日期已被完全预订,无法选择"]; }else{ return [true, '']; } }, onSelect: function(day, inst){ departDay = new Date(day); // 强制保持对话框显示,阻止默认关闭行为 setTimeout(function() { inst.dpDiv.show(); }, 10); }, beforeShow: function(input, inst) { setTimeout(function() { // 自定义关闭按钮的文本和点击事件 var doneBtn = inst.dpDiv.find(".ui-datepicker-buttonpane button.ui-datepicker-close"); doneBtn.text("关闭对话框"); doneBtn.off("click").on("click", function() { // 弹出确认提示框 var confirmClose = confirm("确定要关闭对话框吗?如需重新选择日期请点击取消。"); if (confirmClose) { window.allowDatepickerClose = true; $.datepicker._hideDatepicker(input); } }); // 自定义Today按钮行为:选择今天但不关闭对话框 var todayBtn = inst.dpDiv.find(".ui-datepicker-buttonpane button.ui-datepicker-current"); todayBtn.off("click").on("click", function() { $.datepicker._selectDate(input, new Date()); inst.dpDiv.show(); }); }, 10); } }) .datepicker("show"); if(!inserted_date2){ $('.ui-datepicker-header').after('<div class="text-center p-2 calendar-note" style="font-size:15px">'+'红色半块表示该日期部分时段已被预订'+'</div>'); inserted_date2 = true; } });
修改说明:
阻止自动关闭:
- 在
onSelect事件中通过setTimeout强制重新显示对话框,抵消Datepicker默认的隐藏行为。 - 覆盖
$.datepicker._hideDatepicker方法,添加开关标记allowDatepickerClose,只有当用户点击自定义关闭按钮并确认后,才允许关闭对话框,彻底阻止点击外部区域关闭的行为。
- 在
关闭前确认提示:
在beforeShow事件中修改默认的"Done"按钮文本为"关闭对话框",并绑定自定义点击事件,弹出确认提示框。用户确认关闭后,设置允许关闭的标记并调用隐藏方法;取消则保持对话框打开。兼容Today按钮:
修改Today按钮的行为,选择今天后不关闭对话框,保持用户可以继续操作。
内容的提问来源于stack exchange,提问作者Yousef Hashem
相关产品推荐
相关产品推荐

