【问题标题】:Disable native datepicker in Google Chrome在 Google Chrome 中禁用本机日期选择器
【发布时间】:2012-07-04 10:59:04
【问题描述】:

日期选择器登陆 Chrome 20,是否有任何属性可以禁用它? 我的整个系统使用 jQuery UI 日期选择器,它是跨浏览器,所以,我想禁用 Chrome 原生日期选择器。有标签属性吗?

【问题讨论】:

标签: html google-chrome datepicker


【解决方案1】:

隐藏箭头:

input::-webkit-calendar-picker-indicator{
    display: none;
}

并隐藏提示:

input[type="date"]::-webkit-input-placeholder{ 
    visibility: hidden !important;
}

【讨论】:

【解决方案2】:

如果你误用了<input type="date" />,你可能会使用:

$('input[type="date"]').attr('type','text');

在它们加载后将它们转换为文本输入。您需要先附加您的自定义日期选择器:

$('input[type="date"]').datepicker().attr('type','text');

或者你可以给他们上课:

$('input[type="date"]').addClass('date').attr('type','text');

【讨论】:

  • 很容易成为我最喜欢的解决方案。它很简单,并且不实现浏览器特定的 CSS 选择器。如果启用了 JavaScript,IMO 的预期结果应该是阻止本机控件,从而允许自定义日期选择器。但是,如果 JavaScript 被禁用,那么本机控件仍然可以工作。老实说,这应该是公认的答案。
  • @travesty3 这些版本的 IE 是否支持 html5 日期选择器,或者只是回退到文本?如果没有,那也没关系。
  • 我不明白为什么将 用于日期字段会滥用它? (这个答案的第一句话)
  • 对于出生日期这样的字段不需要日历日期选择器,但仍希望本机浏览器验证该字段是完全有效的。
  • @Duncanmoo 出生日期有什么特别之处?只需将最大值设置为今天(如果您希望允许在婴儿出生当天输入),或 N 年前,其中 N 是您网站用户的最小年龄。特别是在移动设备上,我宁愿使用浏览器原生日期选择器来输入我的出生日期,而不是一些自定义的 JS 东西。还有多少不支持验证的自定义 JS 日期选择器实现?
【解决方案3】:

你可以使用:

jQuery('input[type="date"]').live('click', function(e) {e.preventDefault();}).datepicker();

【讨论】:

  • 如果你使用 jQuery >= 1.7:jQuery('input[type="date"]').on('click', function(e) {e.preventDefault();}).datepicker();
  • 此答案不会删除本机样式。 stackoverflow.com/a/11418704/229787
  • @JustinBull tr​​ue 但问题不在于删除样式,而是允许使用 jQuery 日期选择器来代替这个答案。任何想法如何也可以删除样式?
【解决方案4】:

使用 Modernizr (http://modernizr.com/),它可以检查该功能。然后你可以将它绑定到它返回的布尔值:

// does not trigger in Chrome, as the date Modernizr detects the date functionality.
if (!Modernizr.inputtypes.date) { 
    $("#opp-date").datepicker();
}

【讨论】:

  • 当本地日期选择器不可用时,这对于回退到 jQuery 日期选择器非常有用。但是,这个问题看起来是关于摆脱 Chrome 的日期选择器,所以我已经否决了你的答案。
【解决方案5】:

这对我有用

input[type=date]::-webkit-inner-spin-button, 
input[type=date]::-webkit-outer-spin-button { 
  -webkit-appearance: none; 
  margin: 0; 
}

【讨论】:

    【解决方案6】:

    上面的代码没有设置输入元素的值,也没有触发更改事件。以下代码适用于 Chrome 和 Firefox(未在其他浏览器中测试):

    $('input[type="date"]').click(function(e){
         e.preventDefault();
    }).datepicker({
        onSelect: function(dateText){
            var d = new Date(dateText),
            dv = d.getFullYear().toString().pad(4)+'-'+(d.getMonth()+1).toString().pad(2)+'-'+d.getDate().toString().pad(2);
            $(this).val(dv).trigger('change');
        }
    });
    

    pad 是一个简单的自定义 String 方法,用零填充字符串(必需)

    【讨论】:

      【解决方案7】:

      我同意 Robertc,最好的方法不是使用 type=date,而是我的 JQuery Mobile Datepicker 插件使用它。所以我必须做出一些改变:

      我正在使用 jquery.ui.datepicker.mobile.js 并进行了以下更改:

      从(第 51 行)

      $( "input[type='date'], input:jqmData(type='date')" ).each(function(){
      

      $( "input[plug='date'], input:jqmData(plug='date')" ).each(function(){
      

      并在表单中输入文本并添加 var 插件:

      <input type="text" plug="date" name="date" id="date" value="">
      

      【讨论】:

      • 如果要为本地脚本数据添加自定义属性,有效的方法是使用data-* attributes。在这种情况下,请调用您的属性data-plug 而不是plug,这样可以保证永远不会与 HTML6/7/8/etc 中添加的任何新属性发生冲突。
      【解决方案8】:

      我使用以下(咖啡脚本):

      $ ->
        # disable chrome's html5 datepicker
        for datefield in $('input[data-datepicker=true]')
          $(datefield).attr('type', 'text')
        # enable custom datepicker
        $('input[data-datepicker=true]').datepicker()
      

      转换为纯 javascript:

      (function() {
        $(function() {
          var datefield, _i, _len, _ref;
          _ref = $('input[data-datepicker=true]');
          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
            datefield = _ref[_i];
            $(datefield).attr('type', 'text');
          }
          return $('input[data-datepicker=true]').datepicker();
        }); 
      }).call(this);
      

      【讨论】:

        【解决方案9】:

        这对我有用:

        // Hide Chrome datetime picker
        $('input[type="datetime-local"]').attr('type', 'text');
        
        // Reset date values
        $("#EffectiveDate").val('@Model.EffectiveDate.ToShortDateString()');
        $("#TerminationDate").val('@Model.TerminationDate.ToShortDateString()');
        

        即使日期字段的 仍然存在且正确,但它没有显示。这就是我从视图模型中重置日期值的原因。

        【讨论】:

          【解决方案10】:

          这对我有用:

          ;
          (function ($) {
              $(document).ready(function (event) {
                  $(document).on('click input', 'input[type="date"], input[type="text"].date-picker', function (e) {
                      var $this = $(this);
                      $this.prop('type', 'text').datepicker({
                          showOtherMonths: true,
                          selectOtherMonths: true,
                          showButtonPanel: true,
                          changeMonth: true,
                          changeYear: true,
                          dateFormat: 'yy-mm-dd',
                          showWeek: true,
                          firstDay: 1
                      });
          
                      setTimeout(function() {
                          $this.datepicker('show');
                      }, 1);
                  });
              });
          })(jQuery, jQuery.ui);
          

          另见:

          How can I disable the new Chrome HTML5 date input?

          http://zizhujy.com/blog/post/2014/09/18/Add-date-picker-to-dynamically-generated-input-elements.aspx

          【讨论】:

            【解决方案11】:

            我知道这是一个老问题了,但我只是来到这里寻找有关此的信息,以便其他人也可以。

            您可以使用Modernizr 来检测浏览器是否支持 HTML5 输入类型,例如“日期”。如果是这样,这些控件将使用本机行为来显示日期选择器之类的内容。如果没有,您可以指定应该使用什么脚本来显示您自己的日期选择器。很适合我!

            我在页面中添加了jquery-ui 和 Modernizr,然后添加了以下代码:

            <script type="text/javascript">
                Sys.WebForms.PageRequestManager.getInstance().add_endRequest(initDateControls);
                initDateControls();
            
                function initDateControls() {
                    //Adds a datepicker to inputs with a type of 'date' when the browser doesn't support that HTML5 tag (type=date)'
                    Modernizr.load({
                        test: Modernizr.inputtypes.datetime,
                        nope: "scripts/jquery-ui.min.js",
                        callback: function () {
                            $("input[type=date]").datepicker({ dateFormat: "dd-mm-yy" });
                        }
                    });
                }
            
            </script>
            

            这意味着原生的datepicker显示在Chrome中,jquery-ui的显示在IE中。

            【讨论】:

              【解决方案12】:

              对于 Laravel5 既然有人使用

              {!! Form::input('date', 'date_start', null , ['class' => 'form-control', 'id' => 'date_start', 'name' => 'date_start']) !!}

              => Chrome 将强制使用它的日期选择器。 => 如果你用 css 把它拿走,你会得到通常的格式错误!! (指定的值不符合要求的格式,“yyyy-MM-dd”。)

              解决方案:

              $('input[type="date"]').attr('type','text');

              $("#date_start").datepicker({
                  autoclose: true,
                  todayHighlight: true,
                  dateFormat: 'dd/mm/yy',
                  changeMonth: true,
                  changeYear: true,
                  viewMode: 'months'
              });
              $("#date_stop").datepicker({
                  autoclose: true,
                  todayHighlight: true,
                  dateFormat: 'dd/mm/yy',
                  changeMonth: true,
                  changeYear: true,
                  viewMode: 'months'
              });
              $( "#date_start" ).datepicker().datepicker("setDate", "1d");
              $( "#date_stop" ).datepicker().datepicker("setDate", '2d');
              

              【讨论】:

                【解决方案13】:

                在 HTML 中使用 prop "min"

                    <input type="date" class="form-control" [min]="getDate()">
                

                和课堂上利用这个乐趣来获取今天的日期。

                   getDate(): string {
                    return new Date().toISOString().split('T')[0];
                   }
                

                【讨论】:

                  猜你喜欢
                  • 2014-11-10
                  • 1970-01-01
                  • 2021-08-22
                  • 1970-01-01
                  • 2020-08-25
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多