在Google Chrome中禁用本机datepicker


Answers:


140

隐藏箭头:

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

并隐藏提示:

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

3
::-webkit-input-placeholder不会隐藏“ mm / dd / yyyy”文本,因为它不是占位符,而是本机控制的。
贾斯汀·布尔

1
另外,您缺少选择器。供参考:stackoverflow.com/a/11418704/229787
贾斯汀·布尔

据我所知,这在Android Chrome上不起作用-fiddle.jshell.net/RgY3t/138
Seb Charrot

54

如果您滥用了<input type="date" />,则可以使用:

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

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

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

或者,您可以给他们上一堂课:

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

5
轻松成为我最喜欢的解决方案。它很简单,并且不实现特定于浏览器的CSS选择器。预期的结果IMO应该是在启用JavaScript的情况下阻止本机控件,从而允许使用自定义日期选择器。但是,如果禁用了JavaScript,则本机控件仍将起作用。老实说,这应该是公认的答案。
贾斯汀·布尔

2
@ travesty3那些版本的IE支持html5 datepickers,还是只是回退到文本?如果没有,那就没关系。
rjmunro

2
我不明白为什么对日期字段使用<input type =“ date”>会误用它吗?(此答案的第一句话)
史蒂夫(Steve

3
不想为出生日期之类的字段使用日历日期选择器,但仍希望该字段由本机浏览器验证是完全有效的。
Duncanmoo

1
@Duncanmoo出生日期有什么特别之处?只需将最大值设置为今天(如果要允许婴儿在出生那天输入)或N年前,其中N是您网站用户的最低年龄。特别是在移动设备上,我希望使用浏览器的本机日期选择器输入我的生日,而不是使用一些自定义JS东西。还有多少个不支持验证的自定义JS日期选择器实现?
rjmunro

15

您可以使用:

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

3
如果您使用jQuery> = 1.7:jQuery('input[type="date"]').on('click', function(e) {e.preventDefault();}).datepicker();
yorch 2013年

此答案不会删除本机样式。stackoverflow.com/a/11418704/229787
贾斯汀·布尔

4
@JustinBull是正确的,但问题不在于删除样式,而是允许使用jQuery日期选择器代替此答案。有什么想法可以删除样式吗?
Jimbo

7

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

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

3
当本机datepicker不可用时,这对于回退到jQuery datepicker非常有用。但是,这个问题似乎与摆脱Chrome的日期选择器有关,因此,我否决了您的答案。
2014年

7

这对我有用

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

2

上面的代码既不设置输入元素的值,也不触发更改事件。以下代码可在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方法,以零填充字符串(必填)


1

我同意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(){

并在use形式中键入text并添加var插件:

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

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

1

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

$ ->
  # 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);

1

这为我工作:

// Hide Chrome datetime picker
$('input[type="datetime-local"]').attr('type', 'text');

// Reset date values
$("#EffectiveDate").val('@Model.EffectiveDate.ToShortDateString()');
$("#TerminationDate").val('@Model.TerminationDate.ToShortDateString()');

即使日期字段的仍然存在并且正确,它也不会显示。这就是为什么我从视图模型重置日期值的原因。


0

这对我有用:

;
(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);

也可以看看:

如何禁用新的Chrome HTML5日期输入?

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


0

我知道这是一个古老的问题,但是我只是在这里登陆以查找有关此信息,所以其他人也可能会这样做。

您可以使用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>

这意味着本地日期选择器显示在Chrome中,而jquery-ui一个显示在IE中。


0

对于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');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.