You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取jQuery UI日历当前选中日期元素?onSelect回调异常求助

解决jQuery UI Datepicker选中日期元素的问题

这是个很常见的jQuery UI Datepicker坑——onSelect回调的触发时机其实在DOM更新选中状态类(比如ui-state-active)之前,所以你此时拿到的是上一次选中的元素,而非当前的。下面针对你的问题给出具体解决方案:

1. 修复onSelect中获取当前选中元素的问题

方法一:用setTimeout等待DOM更新

因为onSelect触发后,Datepicker会立刻更新DOM元素的选中状态,我们只需要延迟极短时间(甚至0毫秒,利用浏览器事件循环)就能拿到最新的选中元素:

$('#eventCalendar').datepicker({ 
  dateFormat: 'yy-mm-dd', 
  inline: true, 
  minDate: 0, 
  onSelect: function (date) { 
    printVcInfo(date); 
    // 延迟获取,等待DOM更新完成
    setTimeout(() => {
      console.log("hello" + $(".ui-state-active").first().text()); 
    }, 0);
  } 
}); 

方法二:不依赖ui-state-active,直接通过日期匹配元素

这种方法更可靠,不用依赖DOM类名的更新时机,利用Datepicker实例返回的选中信息精准定位:

$('#eventCalendar').datepicker({ 
  dateFormat: 'yy-mm-dd', 
  inline: true, 
  minDate: 0, 
  onSelect: function (dateText, inst) { 
    printVcInfo(dateText); 
    // 从实例中获取当前选中的日/月/年
    const { selectedDay, selectedMonth, selectedYear } = inst;
    // 找到对应年月的日历容器
    const $targetMonth = $(this).find(`div.ui-datepicker-group[data-year="${selectedYear}"][data-month="${selectedMonth}"]`);
    // 筛选出对应日期的单元格
    const $selectedCell = $targetMonth.find('td.ui-datepicker-day').filter(function() {
      return $(this).text() === selectedDay.toString();
    });
    console.log("hello" + $selectedCell.text()); 
  } 
}); 

2. 通用方法:获取Datepicker当前选中日期的元素

如果你需要在onSelect之外的场景获取当前选中元素,有两种可靠方式:

方式一:通过getDate方法匹配元素

// 获取当前选中的日期对象
const selectedDate = $('#eventCalendar').datepicker('getDate');
// 转换为Datepicker的日期格式,匹配单元格的data-date属性
const dateStr = $.datepicker.formatDate('yy-mm-dd', selectedDate);
// 找到对应的单元格
const $selectedCell = $('#eventCalendar').find(`td[data-date="${dateStr}"]`);

方式二:监听日期单元格的点击事件

直接监听日历中可点击日期的点击事件,实时获取当前选中的元素:

$('#eventCalendar').on('click', 'td.ui-datepicker-day', function() {
  const $cell = $(this);
  // 跳过禁用的日期
  if ($cell.hasClass('ui-datepicker-unselectable')) return;
  
  console.log("当前选中的日期元素文本:" + $cell.text());
  // 也可以获取完整日期对象
  const date = $.datepicker.parseDate('yy-mm-dd', $cell.data('date'));
  console.log("选中的日期对象:", date);
});

内容的提问来源于stack exchange,提问作者Luis Miguel Molina Betancourt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:12:47