对于我正在处理的MVC应用,我们在页面上有一些日期字段。
我最初的反应是使用jQuery UI的datepicker,但我们遇到了一个小麻烦 - 我们也期望这个应用程序可以在iPad上运行。因此,我被要求调查使用HTML5 <input type="date" />
标记,但如果浏览器不支持它,则回退到datepicker。
另一个小问题:IE 邪恶。
显然,IE 确实'支持'<input type="date" />
;它只是在点击时不显示日历。
缩写的,已清理的标记:
@* In the HTML body... *@
@Html.InputFor(m => m.SomeDate, new { id="A", type="date" })
@Html.InputFor(m => m.SomeOtherDate, new { id="B", type="date" })
<script>
var $A = $('#A'),
$B = $('#B');
$(document).ready(function () {
fallbackToDatepicker($A);
fallbackToDatepicker($B);
@* ...SNIP: Other operations here... *@
});
function fallbackToDatepicker($field) {
if($field.type() != "date") {
console.log($field.selector + " is not a date field!");
$field.datepicker();
}
}
</script>
(解决方案基于:http://www.javascriptkit.com/javatutors/createelementcheck2.shtml)
我想解决的问题是确定客户端是否运行的浏览器没有<input type="date" />
的本机日历弹出窗口;如果客户端在这样的浏览器上运行,我需要回退到datepicker。
问题:确定客户端浏览器是否支持日期弹出窗口的更准确但仍然优雅/可编程的方法是什么?
(注意:我建议我的团队放弃日期输入的愚蠢,只需使用日期选择器。)