Указать формат даты в маске при использовании маски ввода?

Я использовал jquery плагин ввода с маской, чтобы применить маску даты к текстовому вводу. . Это работает довольно хорошо, но я хочу, чтобы отображаемая маска также показывала формат. То есть вместо маски

__/__/____

Я хочу иметь возможность указать формат, используя маску, например,

dd/mm/yyyy

или (что выглядит так же с текущей маской, но принципиально отличается)

mm/dd/yyyy

Я не понимаю, как это сделать с этим плагином (насколько я вижу, он принимает только один символ в качестве символа маски). Возможно ли это с текущим плагином? Кто-нибудь знает альтернативный плагин (в идеале с использованием jQuery), который может это сделать? Я не смог ничего найти.


person Adam    schedule 17.01.2012    source источник
comment
Подумайте об этом немного лучше. Предположим, вы можете использовать dd/mm/yyyy, а затем кто-то вводит 29/02/200 (последняя цифра еще не введена). Что плагин должен сделать для конечной цифры? Отклонить все входы, кроме 0, 4 и 8, без обратной связи? Примеров на эту тему много.   -  person Jon    schedule 17.01.2012
comment
Да, вы также можете проверить дату с помощью плагина маски, но не могли бы вы привести пример плагина, который делает это (и имеет другое поведение плагина маски, например, автоматически перемещается по статическим частям ('/' в формат даты)? Я уже проверяю ввод отдельно и доволен этим, мне нужен простой способ сообщить конечному пользователю, в каком формате должна быть дата. нужно проверить, что определенные даты раньше или позже других), но это не требование для меня   -  person Adam    schedule 18.01.2012


Ответы (4)


Это поддерживается https://github.com/digitalBush/jquery.maskedinput (теперь в архиве - раньше был на http://digitalbush.com/projects/masked-input-plugin/) — вам просто нужно указать полный заполнитель (см. демонстрацию даты на этом сайте):

$('#date').mask('99/99/9999',{placeholder:"mm/dd/yyyy"});

person Whisk    schedule 11.07.2017
comment
Зачем маскировать это как 99/99/9999, когда нет месяца, который достигает 99? То же, что день. - person Player1; 26.03.2020
comment
@Whisk - при нажатии на вашу ссылку возникает ошибка при установлении соединения с базой данных - person dcp; 28.07.2020

Недавно у меня было подобное требование, и единственное, что я смог найти, что не требовало от меня большой работы по настройке плагина, — это использовать это модифицированный плагин маскирования даты. Кажется, он делает свою работу до сих пор.

Если вы хотите протестировать его, перейдите на эту страницу.

Базовая реализация, которую мы использовали с этим модифицированным маскировщиком даты, выглядит следующим образом:

$('#yourInputBoxHere').mask("99/99/9999", {placeholder: 'MM/DD/YYYY' });

Надеюсь, это поможет.

Обновление: предупреждение: этот плагин несовместим с более поздними версиями jQuery. Я думаю, что это безопасно для jQuery 1.4 и ниже.

person Kevin Lee Garner    schedule 09.07.2013
comment
Похоже, именно то, что я искал. Спасибо (Предостережение: я пробовал это на страницах выше, но еще не успел реализовать это самостоятельно) - person Adam; 10.07.2013
comment
Слово предупреждения, однако, этот плагин, похоже, несовместим с более поздними версиями jQuery. Я думаю, что это безопасно для jQuery 1.4 и ниже. - person Kevin Lee Garner; 10.07.2013
comment
Можешь обновить ссылки? Нынешние мертвы. - person James Oravec; 27.07.2016
comment
Спасибо @VenomFangs. Я посмотрел и смог успешно получить доступ к связанным страницам по состоянию на 28.07.2016. - person Kevin Lee Garner; 28.07.2016

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

$('#someId').mask("99/99/9999").val("dd/mm/aaaa");
person Martin    schedule 18.07.2012

Вы можете указать свою собственную маску для этого плагина, используя $.mask.definitions, а затем использовать ее в своем коде.

person ShankarSangoli    schedule 17.01.2012
comment
Я знаю, что могу указать свою собственную маску. Проблема не в маске, а в заполнителе (у меня уже есть маска, которая работает). Я хочу что-то вроде $('#foo').mask('99/99/9999', {заполнитель: 'дд/мм/гггг'}). Но при этом используется вся строка заполнителя для каждого символа, а это не то, что мне нужно. - person Adam; 17.01.2012