Отображение даты выбора типа & lt; input type = & ldquo; date & rdquo; & gt; с javascript для Chrome [дубликат]

Я согласен со всеми предыдущими ответами, что это будет уязвимость конфиденциальности / безопасности, если вы сможете сделать это прямо из Javascript. Есть две вещи, о которых я могу думать:

  • Использование Java (с подписанным апплетом)
  • Использование подписанного Javascript, который в FF (и Mozilla вообще) получает более высокие привилегии чем обычный JS (но его довольно сложно настроить)
20
задан Nathan P 20 March 2013 в 19:38
поделиться

5 ответов

18
ответ дан Community 20 August 2018 в 15:09
поделиться

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

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">

Ссылки:

8
ответ дан Andy 20 August 2018 в 15:09
поделиться
  • 1
    – Postlagerkarte 9 February 2018 в 15:02
  • 2
    @Postlagerkarte Вот почему я описал, как заставить их снова работать под фрагментом. Фрагмент есть, чтобы дать вам представление, и вы должны приспособить его к вашим потребностям. – Andy 16 February 2018 в 23:31
  • 3
    Я отредактировал фрагмент, чтобы он поддерживал четкие кнопки вверх и вниз. – Andy 17 February 2018 в 00:05

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

Я выяснил, что решение javascript с функцией «click () & amp ;.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>

2
ответ дан cinatic 20 August 2018 в 15:09
поделиться
  • 1
    Он работает !: $ ('. DateInpuBox'). Click (). Focus () – Gonzalo Gallotti 1 April 2016 в 19:11

Хитрость заключается в том, чтобы запустить 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 на отдельной вкладке, всплывающее окно календаря будет отображаться на текущей вкладке. Уже сообщили .

15
ответ дан Michał Šrajer 20 August 2018 в 15:09
поделиться
  • 1
    initKeyboardEvent устарел, есть ли альтернатива вышеприведенному скрипту с использованием initKeyboardEvent. – karmendra 29 November 2015 в 11:54
  • 2
    по крайней мере, в хром вы должны использовать inputDateElem.focus (); перед отправкой – bortunac 20 February 2016 в 14:30
  • 3
    Это не работает, по крайней мере, не больше. MDN - Note: manually firing an event does not generate the default action associated with that event. For example, manually firing a key event does not cause that letter to appear in a focused text input. In the case of UI events, this is important for security reasons, as it prevents scripts from simulating user actions that interact with the browser itself. ( developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent ) – tiblu 22 November 2016 в 17:04

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

input {
  position: absolute;
  opacity: 0;

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

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

1
ответ дан Philip Murphy 20 August 2018 в 15:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: