jQuery UI Datepicker 在 iOS 上不起作用

Posted

技术标签:

【中文标题】jQuery UI Datepicker 在 iOS 上不起作用【英文标题】:jQuery UI Datepicker not working on iOS 【发布时间】:2015-12-03 22:26:43 【问题描述】:

我有一个带有几个日期字段的搜索表单,我很乐意在上面使用 jQuery UI 的日期选择器:

<input class="formFields datepicker" id="arrival" name="arrival" required="" placeholder="Arrival" readonly="true" type="text">
<input class="formFields datepicker" id="departure" name="departure" required="" placeholder="Departure" readonly="true" type="text">

$( ".datepicker" ).datepicker();

这会在桌面浏览器上产生一个相当漂亮、赏心悦目的日期选择器弹出窗口:

但由于某种原因,在 iPhone 和 iPad 上,点击字段没有任何作用。 Chrome 和 Safari 都是这种情况。

我使用了以下方法来检查点击事件是否被识别(它是):

$(".datepicker").click(function()
    alert("clicked me");
);

我还尝试修改输入字段以输入日期而不是文本:

<input class="formFields datepicker" id="arrival" name="arrival" required="" placeholder="Arrival" type="date">

但这并不是真正的解决方案(实际上是促使我首先使用 jQuery 日期选择器的原因)。

无法识别占位符文本,因此该字段要么显示为空白,要么显示为“mm/dd/yyyy”,而不是“到达” 然后必须在桌面上使用默认的日期选择器,这确实不是那么吸引人,至少与我目前所拥有的相比

【问题讨论】:

这是一个常见的问题,在过去 10 年基于 PC 的 Web 开发中建立的所有出色的 Web 库都不能在新的 320 像素宽的智能手机平台上运行 你解决了吗。我在 iPhone 上使用 jquery ui datepicker 遇到了同样的问题,但 ipad 似乎很好, 【参考方案1】:

可能有点晚了。

我通过注释掉一个 bind('mousemove' ...) 解决了这个问题,似乎该事件导致 ios Chrome 和 Safari(在我的情况下)没有响应。

我注释掉了代码,代码又可以正常工作了。但是我需要在 PC 上使用 mousemove,所以我将 mousemove 包装在 if mobile 语句中。

if (window.innerWidth < 480) 
    $(document).bind('mousemove', function (e) 
       // something that work on PC.
    )

使用 innerWidth 480 来检测移动设备可能是愚蠢的。但它会让你知道如何解决这个问题。

如果 bind 方法经常使用,你也可以封装它。有一个图书馆 http://touchpunch.furf.com/ 似乎功能不全,但完全可以理解。

【讨论】:

以上是关于jQuery UI Datepicker 在 iOS 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 验证和 jquery-ui datepicker

jQuery datepicker - 在初始化后更改 .ui-datepicker-calendar 的显示

将 JQuery UI Datepicker 与来自 Jquery UI 主题的图标一起使用

Rails,如何在特定页面上显示 jquery-ui-datepicker 日历?

使用 jquery-ui/datepicker 的内存泄漏

jquery UI datepicker汉化