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

jQuery UI Datepicker 1.8.23:iPad上单数字触摸时_optionDatepicker()未触发

解决jQuery UI Datepicker 1.8.23触摸单数字日期无法选中的问题

这是jQuery UI Datepicker 1.8.23版本里一个典型的触摸交互遗留bug,我之前帮项目排查过类似问题——核心问题就是单数字日期(比如“2”)的触摸事件没正确触发_optionDatepicker()函数,而两位数日期的事件绑定逻辑是正常的。

问题根源

早期的jQuery UI Datepicker触摸事件处理逻辑有疏漏:对单数字日期的链接元素,要么是选择器匹配不完整,要么是触摸事件的捕获逻辑没覆盖到单数字场景,导致触摸单数字日期时,无法触发后续的日期选中逻辑。

解决方案

下面提供两种可行的解决方式,你可以根据项目情况选:

1. 修补Datepicker的触摸事件绑定逻辑

如果你有权修改jQuery UI源码,找到_datepickerTouchBind方法,替换其中的事件绑定代码,确保所有日期链接(不管单/双数字)都能响应触摸事件:

// 替换原有的触摸事件绑定代码
$('.ui-datepicker-calendar td a', inst.dpDiv).on('touchstart touchend', function(e) {
    e.preventDefault();
    // 在touchend时触发点击,更符合触摸交互习惯
    if (e.type === 'touchend') {
        $(this).trigger('click');
    }
});

这段代码会给所有日期单元格的链接绑定触摸开始和结束事件,在触摸结束时模拟点击,确保_optionDatepicker()能被正常调用。

2. 自定义补丁(无需修改源码)

如果不想改动库源码,可以在自己的业务代码里加个补丁,重新给日期选择器的日期元素绑定触摸事件:

$(function() {
    // 初始化你的日期选择器
    $("#your-datepicker-id").datepicker();
    
    // 全局绑定触摸事件,覆盖所有日期选择器的日期单元格
    $(document).on('touchstart', '.ui-datepicker-calendar td a', function(e) {
        e.preventDefault();
        // 强制触发点击事件,触发_optionDatepicker逻辑
        $(this).trigger('click');
    });
});

这个补丁会监听页面上所有日期选择器的日期链接,当触摸发生时直接触发点击事件,绕过原版本的bug逻辑。

额外建议

jQuery UI 1.8.23是2012年的老版本了,这类触摸交互的bug在后续版本里已经被官方修复。如果项目架构允许,升级到jQuery UI的最新稳定版本是最彻底的解决方案,不仅能解决这个问题,还能拿到更多安全补丁和功能优化。

内容的提问来源于stack exchange,提问作者Chetan Rangappa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:13:08