Я делаю приложение для телефонных разговоров. Когда я пытаюсь type="date"
ввести поле, как показано ниже, на iPhone отображается средство выбора даты, как я и ожидал, но не отображается указанный мной заполнитель. Я нашел ту же проблему здесь, в SO, но нигде нет решения.
<input placeholder="Date" class="textbox-n" type="date" id="date">
html
cordova
datepicker
placeholder
Мумтезир В.П.
источник
источник
Ответы:
Возможно, это не подходит ... но мне это помогло.
источник
Если вы используете метод mvp, но добавляете событие onblur, чтобы вернуть его в текстовое поле, чтобы текст заполнителя снова появлялся, когда поле ввода теряет фокус. Это просто делает хак немного приятнее.
Надеюсь это поможет.
источник
В итоге я использовал следующее.
Что касается комментария (ов) Firefox: Как правило, Firefox не отображает текстовый заполнитель для даты ввода. Но поскольку это вопрос Cordova / PhoneGap, это не должно вызывать беспокойства (если вы не хотите разрабатывать против FirefoxOS).
источник
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.classList.toggle('has-value',this.value);">
input[type="date"]:not(:focus):not(.has-value):before
чтобы показать формат, пока ввод сфокусирован (для людей, которыеЯ использовал это в своем CSS:
и поместите это в javascript:
у меня работает на мобильных устройствах (Ios8 и android). Но я использовал маску ввода jquery для рабочего стола с типом ввода текста. Это решение - хороший способ, если ваш код работает на ie8.
источник
color: #aaa
для внешнего вида, похожего на заполнитель на iOS.color: lightgray
слишком легкий.$("#myel").on( "input" , function(){ $(this).toggleClass( "full" , $(this).val().length > 0 ); });
На сегодняшний день (2016 г.) я успешно использовал эти 2 фрагмента (плюс они отлично работают с Bootstrap4).
Входные данные слева, заполнитель слева
Заполнитель исчезает при нажатии
источник
Согласно стандарту HTML :
источник
Меня устраивает:
источник
:after
убирает псевдоэлемент при выборе даты. Так что не нужно удалять заполнительonfocus="(this.placeholder='')"
чтобы удалить заполнитель после выбора даты.Я использовал этот jQuery: http://jsfiddle.net/daviderussoabram/65w1qhLz/
источник
Основываясь на ответах deadproxor и Alessio, я бы попытался использовать только CSS:
И если вам нужно сделать заполнитель невидимым после ввода чего-либо, мы могли бы попробовать использовать селекторы: valid и: invalid, если ваш ввод является обязательным.
РЕДАКТИРОВАТЬ
Вот код, если вы используете требуемый для ввода:
источник
Нашел лучший способ решить вашу проблему. Думаю, это тебе поможет. когда фокус выделен, поле изменит тип на текст, чтобы отобразить ваш заполнитель. при выделении его тип меняется на дату, поэтому отображается календарь.
источник
Я взял идею jbarlow, но добавил if в функцию onblur, чтобы поля меняли свой тип только в том случае, если значение пустое
источник
Решение проблемы в текущем правильном ответе "при нажатии на поле отображается экранная клавиатура вместо средства выбора даты":
Проблема вызвана тем, что браузер ведет себя в соответствии с типом ввода при нажатии (= текст). Поэтому необходимо перестать фокусироваться на элементе ввода (размытие), а затем программно перезапустить фокус на элементе ввода, который был определен JS как type = date на первом этапе. Клавиатура отображается в режиме телефонных номеров.
источник
попробуйте мое решение. Я использую атрибут 'required', чтобы узнать, заполнен ли ввод, и если нет, я показываю текст из атрибута 'placeholder'
источник
Мне потребовалось некоторое время, чтобы разобраться в этом, оставьте его как
type="text"
и добавьтеonfocus="(this.type='date')"
, как показано выше.Мне даже нравится упомянутая выше идея onBlur
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
Надеюсь, это поможет любому, кто не совсем понял, что происходит выше
источник
Подводя итог проблеме ввода даты:
Решение, которое я нашел для удовлетворения этих требований, - это использовать обычный трюк для стилизации элементов нативной формы: убедитесь, что элемент отображается, но не отображается, и отобразите его ожидаемый стиль с помощью связанной метки . Обычно метка отображается как ввод (включая заполнитель), но поверх нее.
Итак, HTML вроде:
Может быть оформлен как:
Любое событие (щелчок, фокус) на такой связанной метке будет отражено в самом поле и, таким образом, вызовет пользовательский интерфейс ввода даты.
Если вы хотите протестировать такое решение вживую, вы можете запустить эту версию Angular со своего планшета или мобильного телефона.
источник
Итак, то, что я решил сделать, наконец, здесь, и он отлично работает во всех мобильных браузерах, включая iPhone и Android.
Дата
источник
Я работаю с ionicframework, и решение, предоставленное @Mumthezir, почти идеально. В случае, если у кого-то будет такая же проблема, как у меня (после изменения ввод все еще сфокусирован, а при прокрутке значение просто исчезает), поэтому я добавил onchange, чтобы сделать input.blur ()
источник
Ты можешь
как это...
источник
Нашел лучший способ справиться с базовым пониманием пользователя при наведении курсора мыши и открытии datepicker при нажатии:
<input type="text" onfocus="(this.type='date')" onmouseover="(this.type = 'date')" onblur="(this.value ? this.type = 'date' : this.type = 'text')" id="date_start" placeholder="Date">
Также скройте стрелку webkit и сделайте ее шириной 100%, чтобы перекрыть щелчок:
источник
С точки зрения Angular мне удалось поместить заполнитель в элемент даты типа ввода.
Первым делом я определил следующий css:
Причина, по которой это необходимо, заключается в том, что если содержимое css3 имеет другой цвет, чем обычный заполнитель, мне пришлось использовать общий.
Затем в шаблоне используется атрибут viewchild BirthDate, чтобы иметь возможность доступа к этим входным данным из компонента. И определил угловое выражение для атрибута заполнителя, которое будет решать, показывать ли мы заполнитель или нет. Это главный недостаток решения, заключающийся в том, что вам нужно управлять видимостью заполнителя.
источник
Пересмотренный код mumthezir
источник
Я удивлен, что есть только один ответ с подходом, аналогичным тому, который я использовал.
Я получил вдохновение из комментария @Dtipson к ответу @Mumthezir VP.
Я использую для этого два ввода: один - это поддельный ввод,
type="text"
на котором я установил заполнитель, а другой - настоящее поле сtype="date"
.В
mouseenter
событии в их контейнере я скрываю фальшивый ввод и показываю реальный, а сmouseleave
событием делаю наоборот . Очевидно, я оставляю реальный ввод видимым, если для него установлено значение.Я написал код для использования чистого Javascript, но если вы используете jQuery (я использую), его очень легко «преобразовать».
Я тестировал это также на телефоне Android, и он работает, когда пользователь нажимает на поле, отображается датапикер. Единственное, что если реальный ввод не имел значения, и пользователь закрывает datepicker, не выбирая дату, ввод будет оставаться видимым, пока они не коснутся вне его. Нет события, которое можно было бы слушать, чтобы узнать, когда закроется датапикер, поэтому я не знаю, как это решить.
У меня нет устройства iOS, на котором можно его протестировать.
источник
Расширяя решение @mvp с учетом ненавязчивого javascript, вот подход:
HTML:
Javascript:
источник
Я думаю, все, что вам нужно сделать, это изменить модель, чтобы указать, что поле даты допускает значение NULL, а затем поставить на него [Обязательно], если это необходимо. Если вы сделаете это, появится текст-заполнитель.
источник
Привет, я столкнулся с той же проблемой вчера вечером и выяснил, что комбинация всего вашего ответа и некоторой искрящейся магии хорошо справляется:
HTML:
CSS:
JQuery:
Объяснение: Итак, что здесь происходит, прежде всего в HTML , это довольно просто, просто выполняем базовый ввод даты HMTL5 и устанавливаем заполнитель. Следующая остановка: CSS , мы устанавливаем псевдоэлемент: before для подделки нашего заполнителя, он просто берет атрибут заполнителя из самого ввода. Я сделал это доступным только при ширине области просмотра 1024 пикселей - почему я расскажу позже. И теперь jQuery , после нескольких рефакторингов, я придумал этот фрагмент кода, который будет проверять каждое изменение, установлено ли значение или нет, если его нет, он (повторно) добавит класс, наоборот ,
ЗНАЙТЕ ПРОБЛЕМЫ:
надеюсь, это поможет! здор`ово!
источник
Если вас интересует только мобильная связь:
источник
HTML:
JavaScript:
источник
Вот еще один возможный взлом, не использующий js и все еще использующий css
content
. Обратите внимание, что, поскольку:after
некоторые браузеры не поддерживают ввод данных, нам нужно выбрать ввод другим способом, как и дляcontent attr('')
источник
Это работает для меня, используя это как элемент ввода:
Этот CSS показывает постоянный заполнитель. Выбранное значение отображается после заполнителя.
Я использую это решение для формы Wordpress с плагином contact-form-7.
источник
Ни одно из решений не работало у меня правильно в Chrome в iOS 12, и большинство из них не адаптировано для работы с возможным вводом нескольких дат на странице. Я сделал следующее, что в основном создает поддельную метку над вводом даты и удаляет ее при нажатии. Я также удаляю поддельную метку, если ширина области просмотра превышает 992 пикселей.
JS:
CSS:
источник