Подтвердить что ты не робот

Способ отображения родного datepicker в Chrome

Я использую поля <input type="date">, которые изящно возвращаются к jQuery, когда браузер не поддерживает эту область. Относительно недавно Chrome начал предлагать собственный сборщик дат, и это здорово. Но я обнаружил, что многие пользователи пропускают небольшую стрелку, которая вызывает календарь, и поэтому упускают из виду тот факт, что для выбора даты есть простой календарь.

Chrome Native Date Picker

Чтобы сделать это более интуитивно понятным, было бы здорово, если бы я смог открыть собственный пользовательский интерфейс datepicker, когда пользователь перемещает фокус на вход или нажимает на другой элемент (например, маленький значок календаря).

Есть ли способ, который я могу использовать в Chrome для запуска пользовательского интерфейса datepicker?

4b9b3361

Ответ 1

Я не думаю, что вы можете вызвать отображение собственного элемента управления календаря, но вы могли бы выделить его немного больше:

input[type="date"]:hover::-webkit-calendar-picker-indicator {
  color: red;
}
input[type="date"]:hover:after {
  content: " Date Picker ";
  color: #555;
  padding-right: 5px;
}
input[type="date"]::-webkit-inner-spin-button {
  /* display: none; <- Crashes Chrome on hover */
  -webkit-appearance: none;
  margin: 0;
}
<input type="date" />

Ответ 2

Вот способ вызвать средство выбора даты, когда пользователи нажимают на само поле, потому что неграмотные пользователи компьютера не знают, куда им следует щелкать:

input[type="date"] {
    position: relative;
}

/* create a new arrow, because we are going to mess up the native one
see "List of symbols" below if you want another, you could also try to add a font-awesome icon.. */
input[type="date"]:after {
    content: "\25BC"; 
    color: #555;
    padding: 0 5px;
}

/* change color of symbol on hover */
input[type="date"]:hover:after {
    color: #bf1400;
}

/* make the native arrow invisible and stretch it over the whole field so you can click anywhere in the input field to trigger the native datepicker*/
input[type="date"]::-webkit-calendar-picker-indicator {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: auto;
    height: auto;
    color: transparent;
    background: transparent;
}

/* adjust increase/decrease button */
input[type="date"]::-webkit-inner-spin-button {
    z-index: 1;
}

 /* adjust clear button */
 input[type="date"]::-webkit-clear-button {
     z-index: 1;
 }
<input type="date">

Ответ 3

Трюк состоит в том, чтобы запустить F4 KeyboardEvent на входном элементе:

function openPicker(inputDateElem) {
    var ev = document.createEvent('KeyboardEvent');
    ev.initKeyboardEvent('keydown', true, true, document.defaultView, 'F4', 0);
    inputDateElem.dispatchEvent(ev);
}

var cal = document.querySelector('#cal');
cal.focus();
openPicker(cal);

здесь jsfiddle: http://jsfiddle.net/v2d0vzrr/

Кстати, есть интересная ошибка в хроме. Если вы откроете jsfiddle на отдельной вкладке, всплывающее окно календаря будет отображаться на текущей вкладке. Он уже сообщил.

Ответ 4

Для настольных компьютеров (и мобильных устройств) поместите ввод в элемент div с относительным позиционированием и значком так, чтобы ввод имел следующий стиль:

input {
  position: absolute;
  opacity: 0;

  &::-webkit-calendar-picker-indicator {
    position: absolute;
    width: 100%;
  }
}

Это растягивает индикатор средства выбора по всему родительскому элементу div, поэтому он всегда отображает элемент управления датой при нажатии на значок родительского элемента div и/или текст.

Ответ 5

Благодаря Энди Трюку я получил кинематографическое решение, работающее над Chrome, и добавил образец стиля зависания.

div {
  position: relative;
}
input {
  position: absolute;
  opacity: 0;
}
input::-webkit-calendar-picker-indicator {
  position: absolute;
  width: 100%;
  height: 100%;
  opacity: 0;
}
input:hover + button {
  background-color: silver;
}
<div>
  <input type="date">
  <button id="calendar_text">Search Date 📅</button>
</div>

Ответ 6

Я думаю, что люди очень часто хотят использовать другую иконку или элемент, чтобы открыть собственное поле datepicker.

Я понял, что решение javascript с "click() и .focus()" только работает в webkit и некоторых других браузерах на рабочем столе, но , к сожалению, не в FireFox.

Но это возможно по-другому, путем наложения входного поля над элементом значка (или тем, что вы хотите использовать) и сделало его невидимым по непрозрачности 0.

Этот работает очень хорошо на мобильных устройствах, для настольных устройств я бы предложил вам добавить событие onclick в качестве резервного "$ ('. dateInpuBox" ). click ().focus() "

    .myBeautifulIcon {
      position: relative;
      width: 50px;
    }
    .dateInputBox {
      position: absolute;
      width: 100%;
      height: 100%;
      top: 0;
      left: 0;
      opacity: 0;
    }
<div class="myBeautifulIcon">
  ICON
  <input class="dateInputBox" type="date" />
</div>