
当用户切换医生下拉选项时,已加载的时间槽不会自动刷新或清空,需通过监听医生选择变化并主动隐藏日期选择器,触发重新选日以获取新医生对应时段。
当用户切换医生下拉选项时,已加载的时间槽不会自动刷新或清空,需通过监听医生选择变化并主动隐藏日期选择器,触发重新选日以获取新医生对应时段。
在当前实现中,时间槽仅在日期被点击(onSelect)时通过 AJAX 请求加载,而医生 <select></select> 的变更未被监听——导致用户切换医生后,原时间槽仍残留,且不会主动请求新数据。解决的关键在于:让医生变更事件“重置”日期选择状态,并清空旧内容。
最直接有效的方式是:当用户操作医生下拉框(如点击、更改值)时,立即隐藏日期选择器(datepicker("hide")),并清空时间槽容器(#date_field)。这样,下次用户点击日期时,onSelect 回调会使用最新的 doctor_id 发起请求,确保数据一致性。
✅ 推荐增强方案(含防抖与状态清理):
// 1. 监听医生选择变更(推荐用 change 而非 click,更准确捕获值变化)
$('#doctor').on('change', function() {
const selectedDoctorId = $(this).val();
// 清空时间槽显示
$('#date_field').empty();
// 隐藏日期选择器,避免干扰用户操作
$('#datepicker').datepicker('hide');
// 可选:重置日期输入框(若需视觉提示)
$('#date_time').val('');
});
// 2. 保持原有 datepicker 配置,但优化 onSelect 中的 doctor_id 获取逻辑
$('#datepicker').datepicker({
dateFormat: 'yy-mm-dd',
onSelect: function(dateText, inst) {
$('#date_time').val(dateText);
const doctor_id = $('#doctor').val(); // 使用 ID 选择器更可靠,避免 class 冗余匹配
if (!doctor_id) {
$('#date_field').html('<small class="text-muted">请先选择医生</small>');
return;
}
$.ajax({
url: '= base_url() ?>frontend/get_datetime',
type: 'POST',
data: { date: dateText, doctor_id: doctor_id },
dataType: 'html',
success: function(data) {
$("#date_field").html(data);
},
error: function() {
$("#date_field").html('<small class="text-danger">加载时段失败,请重试</small>');
}
});
},
showOtherMonths: true,
selectOtherMonths: true,
changeMonth: true,
changeYear: true
});
⚠️ 注意事项:
- 避免使用
click监听下拉框——它无法保证值已真正改变(例如点击已选项无变化);change事件更语义化且可靠; - 在
onSelect中应校验doctor_id是否有效,防止空值请求; - 清空
#date_field是必要步骤,否则旧内容可能残留,即使 AJAX 返回空响应; - 若业务允许,还可进一步扩展:医生变更后自动打开日期选择器(
datepicker('show')),提升操作连贯性。
通过以上调整,系统行为将更符合用户直觉:医生一换,时间槽即清空;再点日期,即按新医生加载专属时段——实现真正响应式的数据联动。











