Вимкніть власний вибір дати в Google Chrome


88

Засіб вибору дати потрапив на Chrome 20, чи існує якийсь атрибут, який би його відключив? Вся моя система використовує jQuery UI datepicker, і це крос-браузер, тому я хочу відключити власний Chrome datepicker. Чи існує якийсь атрибут тегу?


Відповіді:


140

Щоб приховати стрілку:

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

І щоб приховати підказку:

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

3
:: - webkit-input-placeholder не буде приховувати текст "мм / дд / рррр", оскільки він не є заповнювачем, він контролюється безпосередньо.
Джастін Булл

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"> для поля дати неправильно використовує його? (перше речення цієї відповіді)
Стів

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 21.03.13

Ця відповідь не прибирає рідний стиль. stackoverflow.com/a/11418704/229787
Джастін Булл

4
@JustinBull правда, але питання полягав не в тому, щоб видалити стиль, а в тому, щоб дозволити використовувати jQuery дату вибору, яку ця відповідь досягає. Будь-які ідеї, як також можна зняти укладку?
Джимбо

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
Це дуже корисно для повернення до jQuery datepicker, коли власний datepicker недоступний. Однак це питання, схоже, стосується позбавлення від засобу вибору дати Chrome, тому я проголосував вашу відповідь проти.
Сем

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

а у формі використання введіть текст і додайте штекер var:

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

3
Якщо ви хочете додати власні атрибути для локальних даних сценарію, дійсним способом є використання data-*атрибутів . У цьому випадку викличте свій атрибут data-plugзамість plug, тоді він гарантовано ніколи не зіткнеться з будь-яким новим атрибутом, доданим у HTML6 / 7/8 / тощо.
robertc

1

Я використовую наступне (coffeescript):

$ ->
  # 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-generated-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, ви отримаєте звичайні помилки форматування !! (Вказане значення не відповідає необхідному формату, "рррр-ММ-дд".)

РІШЕННЯ:

$ ('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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.