【问题标题】:Loading jQuery UI datepicker when native HTML5 date input type not present当原生 HTML5 日期输入类型不存在时加载 jQuery UI 日期选择器
【发布时间】:2013-09-17 22:33:04
【问题描述】:

虽然<input type="date"> 在桌面端并不常见,但这是移动端的首选方法。

我正在尝试实现本节底部的后备代码: http://diveintohtml5.info/forms.html#type-date

<form>
  <input type="date">
</form>

<script>
  var i = document.createElement("input");
  i.setAttribute("type", "date");
  if (i.type == "text") {

    // No native date picker support :(
    // Use Dojo/jQueryUI/YUI/Closure to create one,
    // then dynamically replace that <input> element.
    var script = document.createElement('script');
    script.scr = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js";
    document.getElementsByTagName('head')[0].appendChild(script);

    var style = document.createElement('style');
    style.href = "http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css";
    document.getElementsByTagName('head')[0].appendChild(style);

    $(function() {
       $.datepicker.setDefaults(
          $.extend($.datepicker.regional['']);
       );
    });
  }
</script>

使用上述逻辑,$(function()) 中的任何内容都会引发控制台错误,并且日期选择器未定义。我该如何重写它,以便仅在本机日期选择器不可用时才显示 jQueryUI 脚本和样式?

我正试图在移动浏览器和 Chrome 的这些页面上降低 http 请求并提高整体页面性能,因为它们都有可用的本地日期选择器。

【问题讨论】:

    标签: javascript jquery html jquery-ui datepicker


    【解决方案1】:

    这是[input type="date"] 支持的另一种后备方法,我发现它很有帮助。

    会发生什么:测试浏览器是否支持日期输入类型。如果有,照常营业。如果没有,那么您可以加载创建漂亮的日期选择器控件所需的脚本和样式。

    我用过

    在以您选择的任何方式包含上述脚本后,然后将此脚本添加到您的页面以处理条件回退。

    yepnope({
        test: Modernizr.inputtypes && Modernizr.inputtypes.date,
        nope: [
              //'scripts/jquery.js','scripts/jquery-ui.js','css/jquery-ui.css'
              '~/scripts/app/dateinput.html5shim.js'
            ]
        });
    

    -- jQuery、jQueryUI、Modernizr 和 YepNope 都加载到我的项目的包中。

    我的 datepicker 脚本直接从下面的教程中复制而来。这只是在 DOM 准备好时为所有类型为 date 的输入元素初始化 jQuery UI 控件

    $(function () {
        $("input[type='date']").datepicker();
    });
    

    这个答案来自css-tricks成名的总是乐于助人的Chris Coyier。完整教程在这里:http://css-tricks.com/progressively-enhancing-html5-forms/

    【讨论】:

    • 仅在浏览器没有内置功能的情况下应用此功能:if ( $('[type="date"]').prop('type') != 'date' ) { $('[type="date"]').datepicker(); } 来自:stackoverflow.com/questions/18020950/…
    【解决方案2】:

    您必须等到脚本加载后才能使用它。我建议使用 $.getScript 来加载它。

    $.getScript("http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js", function(){
       $.datepicker.setDefaults(
          $.extend($.datepicker.regional[''];)
       );
    });
    

    您还必须使用&lt;link&gt; 标签将样式表插入到您的文档中,而不是样式标签。

    【讨论】:

    • 有趣,有效。我将如何加载 jQueryUI 的样式表?和我一直在做的一样吗?
    • @micah 和你一样。
    • 嗯,我不知道为什么,但我必须动态插入 jQueryUI 样式标签的方法不起作用。有没有更好的方法?
    • @micah 使用link 标签而不是style 标签。
    • 啊,不错。我还必须为rel="stylesheet" 添加另一行,以便它知道它是什么类型的链接。现在它按预期工作。感谢您的帮助!
    猜你喜欢
    • 2015-07-25
    • 2010-12-05
    • 2016-10-19
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多