- Средство выбора даты HTML5 не отображается в Safari
- 4 ответа
- Не отображается заполнитель для поля input type=» date
- 29 ответов
- входные данные слева, заполнитель слева
- заполнитель исчезает при нажатии
- Input type datetime не работает
- Значение
- Дополнительные атрибуты
- Использование полей ввода c типом date
- Как использовать date?
- Установка максимальной и минимальной даты
- Controlling input size
- Validation
- Handling browser support
- Examples
- JavaScript
Средство выбора даты HTML5 не отображается в Safari
Раньше я использовал средство выбора даты jQuery, а теперь преобразовал некоторые поля даты в формах на моем веб-сайте в средство выбора даты HTML5.
В документации говорится, что Safari поддерживается: однако в настоящее время он отображает только текстовое поле (тогда как Chrome и другие браузеры правильно отображают выбор даты).
(то же самое применяется без атрибута min)
Это моя строка кода — я что-то делаю неправильно или просто неправильно читаю документацию, и она НЕ поддерживается в Safari?
4 ответа
Safari не включает собственный datepicker для своей настольной версии (хотя он есть для iOS). Кстати, IE тоже. Это очень расстраивает, так как в противном случае разработчики могли бы сэкономить много времени.
Это полезная ссылка для отслеживания поддержки для него: http://caniuse.com/#feat=input- datetime
Вы можете использовать шаблон регулярного выражения для проверки формата в заполнителе, как в примере выше. Тот, что здесь, является хорошей отправной точкой, но вы можете создать свой собственный.
Попробуйте выполнить приведенный ниже код в Safari без добавления допустимого форматированного значения, например строки текста.
Неправильный формат показывает ошибку проверки, правильный формат (дд / мм / гггг или дд-мм-гггг) отправит форму, и она исчезнет.
С помощью jQuery и jQuery UI вы можете создать кроссбраузерный указатель даты, который появляется только тогда, когда браузер не поддерживает его изначально. Если в вашем проекте уже есть jQuery, просто выполните:
Источник
Не отображается заполнитель для поля input type=» date
Iam делает приложение phonegap, когда я пытаюсь type=»date» поле ввода, как показано ниже, он показывает выбор даты в iPhone, как я ожидал, но он не показывает заполнитель, который я дал. Я нашел ту же проблему здесь ,в SO, но нигде нет решения, Надеюсь, кто-то может мне помочь. Спасибо.
29 ответов
это может быть неуместно. но в конце концов мне это помогло.
Если вы используете метод mvp, но добавляете событие onblur, чтобы изменить его обратно в текстовое поле, чтобы текст-заполнитель появился снова, когда поле ввода теряет фокус. Это просто делает Хак немного лучше.
надеюсь, что это помогает.
в итоге я использовал следующее.
я использовал это в своем css:
и поместите что-то подобное в javascript:
он работает для меня для мобильных устройств (Ios8 и android). Но я использовал jQuery inputmask для рабочего стола с типом ввода текста. Это решение это хороший способ, если ваш код работает на ie8.
На сегодняшний день (2016) я успешно использовал эти 2 фрагмента (плюс они отлично работают с Bootstrap4).
входные данные слева, заполнитель слева
заполнитель исчезает при нажатии
следующие атрибуты содержимого не должны быть указаны и не применяются к элементу: accept, alt, checked, dirname, formaction, formenctype, formmethod, formnovalidate, formtarget, height, inputmode, maxlength, minlength, multiple, pattern,местозаполнитель, размер, src и ширина.
на основе ответов deadproxor и Alessio я бы попытался использовать только CSS:
и если вам нужно сделать заполнитель невидимым после записи чего-то на входе, мы могли бы попробовать использовать :valid и: invalid селекторы, если ваш вход является обязательным.
редактировать
вот код, если вы используете обязательный для ввода:
это работает для меня:
адресация проблемы в текущем правильном ответе «щелчок по полю показывает экранную клавиатуру вместо datepicker»:
проблема вызвана тем, что браузер ведет себя в соответствии с типом ввода при нажатии (=text). Поэтому необходимо перестать фокусироваться на входном элементе (размытие), а затем программно перезапустить фокус на входном элементе, который был определен как type=date JS на первом шаге. Клавиатуры дисплеев в телефона-режим.
чтобы суммировать проблему ввода даты:
- вы должны отображать их (т. е. избегать отображения: нет), иначе входной интерфейс не будет запущен;
- заполнитель противоречит им (согласно спецификации и потому, что они должны отображать определенный пользовательский интерфейс);
- преобразование их в другой тип ввода для несфокусированного времени do позволяет заполнители, но фокус затем запускает неправильный входной интерфейс (клавиатура), по крайней мере, в течение небольшого времени, потому что фокус события нельзя отменить.
- вставка (до) или добавление (после) содержимого не препятствует отображению входного значения даты.
решение, которое я нашел для удовлетворения этих требований, — использовать обычный трюк для стиля собственных элементов формы : убедитесь, что элемент отображается, но не виден, и отобразить ожидаемый стиль с надписи. Как правило, метка будет отображаться как вход (включая заполнитель), но поверх него.
может быть оформлен в виде:
любое событие (щелчок, фокус) на такой связанной метке будет отражено на самом поле и поэтому вызовет ввод даты UI.
Если вы хотите протестировать такое решение вживую, вы можете запустить эта угловая версия С вашего планшета или мобильного телефона.
Итак, что я решил сделать, наконец, здесь, и его работа отлично работает на всех мобильных браузерах, включая iPhones и Androids.
Im работает с ionicframework и решением, предоставленным @Mumthezir, почти идеально. В случае, если у кого-то будет такая же проблема, как у меня(после изменения вход все еще сфокусирован, а при прокрутке значение просто исчезает), поэтому я добавил onchange для ввода.blur ()
- установите его как тип text
- конвертировать в дату на фокус
- сделайте щелчок по нему
- . пусть пользователь проверяет дату
- при изменении хранить значение
- установить ввод для ввода текста
- установите входное значение типа текста в сохраненное значение
потребовалось некоторое время, чтобы понять это, оставьте его как type=»text» и добавить onfocus=»(this.type=’date’)» , как показано выше.
мне даже нравится идея onBlur, упомянутая выше
надеюсь, это поможет всем, кто не совсем собрал, что происходит выше
С угловой точки зрения мне удалось поместить заполнитель во входной элемент типа date.
прежде всего я определил следующий css:
причина, по которой это необходимо, заключается в том, что если содержимое css3 имеет другой цвет, чем обычный заполнитель, поэтому мне пришлось использовать общий.
затем в шаблоне используется атрибут viewchild birthDate, чтобы иметь доступ к этому входу из компонента. И определил угловое выражение на атрибут placeholder, который решит, показываем ли мы заполнитель или нет. Это главный недостаток решения, заключается в том, что вы должны управлять видимостью заполнителя.
пересмотренный код mumthezir
расширение решения @mvp с ненавязчивым javascript в виду, вот подход:
Я думаю, все, что вам нужно сделать, это изменить модель, чтобы сказать, что поле даты является недействительным, а затем поставить [требуется] на него, если это необходимо. Если вы это сделаете, появится текст-заполнитель.
Эй, так что я столкнулся с тем же вопросом прошлой ночью и выяснил комбинацию всего вашего ответа и какой-то сверкающей магии делают хорошую работу:
объяснение: Итак, что здесь происходит, прежде всего в HTML-код, это довольно прямо вперед, просто делая базовый hmtl5-date-input и установить заполнитель. Следующая остановка: в CSS, мы установка a: before-pseudo-element для подделки нашего заполнителя, он просто берет атрибут заполнителя из самого ввода. Я сделал это доступным только с ширины окна просмотра 1024px-почему я собираюсь рассказать позже. А теперь jQuery, после рефакторинга пару раз я придумал этот код, который будет проверять каждое изменение, если есть значение или нет, если его не будет (повторно)добавить класс, наоборот.
- в chrome есть проблема с выбором даты по умолчанию, для чего предназначен media-query. Он добавит заполнитель перед DD по умолчанию.мм yyyy ‘ — вещь. Вы также можете установить заполнитель ввода даты на «дата:» и настроить цвет без значения внутри ввода. для меня это привело к некоторым другим меньшим проблемам, поэтому я пошел с просто не показывая его на «больших» экранах
надеюсь, что помогает! салют!
Если вас интересует только мобильный телефон:
Источник
Input type datetime не работает
Элементы типа date создают поля ввода и позволяют пользователю ввести дату, либо использовать text box для автоматической проверки контента или использовать специальный интерфейс date picker. Возвращаемое значение включает год, месяц, день, но не время. Используйте поля ввода time (en-US) или datetime-local, чтобы вводить время или дату+время соответственно.
Отображение date различается в зависимости от браузера, кроме того не все браузеры поддерживают date . Подробнее см. Browser compatibility. В неподдерживаемых браузерах элемент будет отображаться как обычный .
Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста, клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на внесение изменений.
Среди браузеров со своим интерфейсом для выбора даты, есть интерфейс браузеров Chrome и Opera, который выглядит так:
В Edge он выглядит так:
А в Firefox выглядит так:
Value | Возвращает DOMString , с датой в формате гггг-мм-дд, или пустую строку |
События | change (en-US) и input (en-US) |
Поддерживаемые атрибуты | autocomplete , list , readonly , and step |
IDL attributes | list , value , valueAsDate , valueAsNumber . |
Методы | select() (en-US) , stepDown() (en-US) , stepUp() (en-US) |
Значение
Возвращает DOMString , представляющий значение даты введённой в input. Вы можете установить значение по умолчанию для элемента с помощью добавления атрибута в value , например:
Помните, что отображаемый формат даты отличается от настоящего значения value – отображаемый формат даты будет выбран, базируясь на региональных параметрах браузера пользователя, тогда как значение value всегда имеет формат гггг-мм-дд .
Вы также можете получить или установить значение даты в JavaScript с помощью свойств value и valueAsNumber элемента input. Например:
Этот код выбирает первый элемент , type которого date и устанавливает значение даты в 2017-06-01 (1 Июня 2017). Затем он считывает это значение обратно в строковом и числовом форматах.
Дополнительные атрибуты
В дополнение к общим атрибутам для всех элементов , у «date» есть следующие дополнительные атрибуты:
Атрибут | Описание |
---|---|
max | Максимально возможная дата для установки |
min | Минимально возможная дата для установки |
step | Шаг (в днях), с которым будет изменяться дата при нажатии кнопок вниз или вверх данного элемента |
Максимально возможная дата для установки. Если value является более поздней датой, чем дата, указанная в атрибуте max , элемент отобразит ошибку при помощи constraint validation. Если в атрибуте max указано значение, не удовлетворяющее формату yyyy-MM-dd , значит элемент не будет иметь максимальной даты.
В атрибуте max должна быть указана строка с датой, которая больше или равна дате, указанной в атрибуте min .
Минимально возможная дата для установки. Если value является более ранней датой, чем дата, указанная в атрибуте min , элемент отобразит ошибку при помощи constraint validation. Если в атрибуте min указано значение, не удовлетворяющее формату yyyy-MM-dd , значит элемент не будет иметь минимальной даты.
В атрибуте min должна быть указана строка с датой, которая меньше или равна дате, указанной в атрибуте max .
Атрибут step – это число, которое определяет точность, с которой задаётся значение, или специальное значение any , описанное ниже. Только значения, кратные шагу ( min , если задано, иначе value , или подходящее стандартное значение, если ни одно из двух не задано) будут корректными.
Строковое значение any означает, что никакое значение шага не задано и допустимо любое значение (в пределах других ограничений, таких как min и max ).
Примечание: Когда значение, введённое пользователем, не подходит под заданное значение шага, user agent может округлить его до ближайшего допустимого значения с приоритетом в большую сторону в том случае, если значение находится ровно посередине шага.
Для полей ввода date значение step задаётся в днях; и является количеством миллисекунд, равное 86 400 000 умножить на значение step (получаемое числовое значение хранится в миллисекундах). Стандартное значение step равно 1, что означает 1 день.
Для полей ввода date указание для step значения any даёт такой же эффект, что и значение 1 .
Использование полей ввода c типом date
На первый взгляд, элемент выглядит заманчиво — он предоставляет лёгкий графический интерфейс для выбора даты, нормализует формат даты, отправляемой на сервер независимо от локальных настроек пользователя. Тем не менее, есть проблемы с в связи с ограниченной поддержкой браузеров.
В этом разделе мы посмотрим на простые, а затем и более сложные способы использования , и позже дадим советы по уменьшению влияния поддержки браузерами (смотрите Handling browser support).
Надеемся, со временем поддержка браузерами станет повсеместной, и эта проблема исчезнет.
Как использовать date?
Самый простой способ использовать — это использовать его с элементами и label , как показано ниже:
Установка максимальной и минимальной даты
Вы можете использовать атрибуты min и max , чтобы ограничить дату, которую может выбрать пользователь. В следующем примере мы устанавливаем минимальную дату 2017-04-01 и максимальную дату 2017-04-30 . Пользователь сможет выбрать дату только из этого диапазона:
В результате выполнения кода, пользователь сможет выбрать любой день апреля 2017 года, но не сможет выбрать и даже просмотреть дни других месяцев и годов, в том числе через виджет date picker.
Примечание: вы должны уметь использовать атрибут step , чтобы менять количество дней, на которое будет происходить шаг при изменении даты (например, чтобы сделать выбираемыми только субботы). Однако, не похоже, что это где-то применялось на данный момент.
Controlling input size
doesn’t support form sizing attributes such as size . You’ll have to resort to CSS for sizing needs.
Validation
By default, does not apply any validation to entered values. The UI implementations generally don’t let you enter anything that isn’t a date — which is helpful — but you can still leave the field empty or (in browsers where the input falls back to type text ) enter an invalid date (e.g. the 32nd of April).
If you use min and max to restrict the available dates (see Setting maximum and minimum dates), supporting browsers will display an error if you try to submit a date that is outside the set bounds. However, you’ll have to check the results to be sure the value is within these dates, since they’re only enforced if the date picker is fully supported on the user’s device.
In addition, you can use the required attribute to make filling in the date mandatory — again, an error will be displayed if you try to submit an empty date field. This, at least, should work in most browsers.
Let’s look at an example — here we’ve set minimum and maximum dates, and also made the field required:
If you try to submit the form with an incomplete date (or with a date outside the set bounds), the browser displays an error. Try playing with the example now:
Here’s a screenshot for those of you who aren’t using a supporting browser:
Here’s the CSS used in the above example. Here we make use of the :valid and :invalid CSS properties to style the input based on whether or not the current value is valid. We had to put the icons on a next to the input, not on the input itself, because in Chrome the generated content is placed inside the form control, and can’t be styled or shown effectively.
Important: HTML form validation is not a substitute for scripts that ensure that the entered data is in the proper format. It’s far too easy for someone to make adjustments to the HTML that allow them to bypass the validation, or to remove it entirely. It’s also possible for someone to simply bypass your HTML entirely and submit the data directly to your server. If your server-side code fails to validate the data it receives, disaster could strike when improperly-formatted data is submitted (or data which is too large, is of the wrong type, and so forth).
Handling browser support
As mentioned above, the major problem with using date inputs at the time of writing is browser support. As an example, the date picker on Firefox for Android looks like this:
Non-supporting browsers gracefully degrade to a text input, but this creates problems both in terms of consistency of user interface (the presented control will be different), and data handling.
The second problem is the more serious of the two; as we mentioned earlier, with a date input, the actual value is always normalized to the format yyyy-mm-dd . With a text input on the other hand, by default the browser has no recognition of what format the date should be in, and there are lots of different ways in which people write dates, for example:
One way around this is to put a pattern attribute on your date input. Even though the date input doesn’t use it, the text input fallback will. For example, try viewing the following example in a non-supporting browser:
If you try submitting it, you’ll see that the browser now displays an error message (and highlights the input as invalid) if your entry doesn’t match the pattern nnnn-nn-nn , where n is a number from 0 to 9. Of course, this doesn’t stop people from entering invalid dates, or incorrectly formatted dates, such as yyyy-dd-mm (whereas we want yyyy-mm-dd ). So we still have a problem.
The best way to deal with dates in forms in a cross-browser way at the moment is to get the user to enter the day, month, and year in separate controls ( elements being popular; see below for an implementation), or to use a JavaScript library such as jQuery date picker.
Examples
In this example we create two sets of UI elements for choosing dates: a native picker and a set of three elements for choosing dates in older browsers that don’t support the native input.
The HTML looks like so:
The months are hardcoded (as they are always the same), while the day and year values are dynamically generated depending on the currently selected month and year, and the current year (see the code comments below for detailed explanations of how these functions work.)
JavaScript
The other part of the code that may be of interest is the feature detection code — to detect whether the browser supports , we create a new element, set its type to date , then immediately check what its type is set to — non-supporting browsers will return text , because the date type falls back to type text . If is not supported, we hide the native picker and show the fallback picker UI ( ) instead.
Note: Remember that some years have 53 weeks in them (see Weeks per year)! You’ll need to take this into consideration when developing production apps.
Источник