我有一个输入字段,我想在上面使用日期选择器。我正在使用 jquery 日期选择器,然后我意识到它在 iphone 上效果不佳,我阅读将其更改为使用 ios 的本机日期选择器的 html5 input type="date"。但是,这也适用于其他浏览器吗?最好的方法是什么,因为我不希望 jquery ui 日期选择器和 ios 的自然日期选择器都出现在 iphone 上。
2 回答
对 datepicker 输入类型的支持非常罕见。见这里。在支持该功能的少数浏览器中,支持和实现非常不同。
Safari 提供日期格式的文本字段,但没有真正的日历小部件。Chrome 中的部分支持是指“日期”类型的日历小部件,但只是所有其他日期/类型字段的文本字段。Chrome 23 支持“时间”类型。Chrome 25 增加了对“周”和“月”类型的支持。Android 4.x 浏览器的某些修改版本确实支持日期/时间字段。
我不确定 jQuery Ui Datepicker 是否足够聪明,可以检测输入类型是否受支持,如果不出现。但为了节省开支,我会使用 jQuery Ui 之一。
有很多可能性。究竟是什么不那么好?
编辑
随着这个答案被接受,我只想弄清楚问题是什么(安德鲁韦尔奇在下面的评论中提到了它)。如果用户可以选择在日期选择器的输入字段中输入内容,则 iPhone 键盘会触发,这会导致不希望的行为并“破坏”日期选择器。为了防止这种情况,您只需将输入设置为只读字段。
<input type="text" id="datepicker" readonly="readonly">
我有同样的问题,我认为你可以使用 jQuery Mobile ui 日期选择器。iOS(Safari)支持原生日期选择器,而android不支持!
您需要检测客户端是否为 iOS 客户端,然后使用input type="date"
else 使用jQuery Mobile的UiDatePicker
您可以通过此代码检测设备是否为 iOS(根据 Haim Evgi的 PHP ):
<?php
//Detect special conditions devices
$iPod = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$iPad = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");
$Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android");
$webOS = stripos($_SERVER['HTTP_USER_AGENT'],"webOS");
//do something with this information
if( $iPod || $iPhone ){
//browser reported as an iPhone/iPod touch -- do something here
}else if($iPad){
//browser reported as an iPad -- do something here
}else if($Android){
//browser reported as an Android device -- do something here
}else if($webOS){
//browser reported as a webOS device -- do something here
}
?>
最后,您需要将<input>
标签设置为readonly="readonly"
代码(jQuery 移动):
<input type="date" name="date" id="date" value="" data-role="datebox"
data-options='{"mode": "datebox","useDialogForceFalse": true}' readonly="readonly" />