Combinig JQuery datapicker с проверкой поля ввода / фильтра - PullRequest
0 голосов
/ 25 марта 2009

Я использую JQueryui Datepicker. Но на самом деле это не влияет на значения, введенные вручную в поле ввода. Есть ли способ, которым я могу использовать тот же (клиентский) код, чтобы указать маску / валидацию в поле ввода (когда сборщик данных не используется - не просто выводить DatePicker в правильном формате).

Какой самый последовательный способ сделать это в среде JQuery?

Спасибо

Примечания

  1. Похоже, что jQuery наложил некоторые ограничения на ввод (т. Е. Я могу вводить только цифры - маску "гггдд"), поэтому главное - получить подтверждение.

Ответы [ 4 ]

0 голосов
/ 24 июня 2015

Есть ли причина, по которой вы не можете сделать простейшую вещь?

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

  1. Сравните длину ввода с форматом.
  2. Разобрать дату и попытаться создать объект даты, чтобы убедиться, что дата является действительной датой.
0 голосов
/ 25 марта 2009

Используйте плагин jQuery Validation . Он сосуществует со средством выбора даты в пользовательском интерфейсе; мы делаем это в наших приложениях. Имейте в виду, что средство проверки даты по умолчанию не будет помечать явно недопустимые даты, такие как «40 февраля 2009 г.», потому что оно использует синтаксический анализатор дат JavaScript, который немного более слаб в отношении того, что он принимает. Но действительно просто заменить валидатор по умолчанию одним из ваших .

0 голосов
/ 27 марта 2010

Предполагая, что вы используете плагин Validate, вы можете написать собственное правило, которое переопределяет собственную логику ui.Datepicker для определения, какие даты выбрать или нет. Я должен был написать это сегодня и подумал, что кто-то еще мог бы выиграть, зная, как:

jQuery.validator.addMethod("vdate", function(value, element) {
    // Datepicker's internal method for choosing selectable ported to a custom validator method.
    // All criteria are the same, except othermonth is omitted.
    var inst =          $.data(element,'datepicker'); // instance data used internally by datepicker's functions
    var printDate =     $(element).datepicker("getDate");
    var minDate =       $.datepicker["_getMinMaxDate"](inst, 'min', true);
    var maxDate =       $.datepicker["_getMinMaxDate"](inst, 'max');
    var beforeShowDay = $.datepicker["_optionDatepicker"](element,'beforeShowDay');
    var daySettings =   (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
    var unselectable =  (!daySettings[0] || (minDate !=null && (printDate < minDate)) || (maxDate !=null && (printDate > maxDate)));
    return (this.optional(element) || !unselectable);
}, "Please choose a valid date");

Этот конкретный метод addMethod обладает преимуществом проверки каждого поля по отдельности, поэтому, если у вас есть несколько сборщиков дат, совместно использующих имя класса 'vdate', но, возможно, имеющие различные настройки minDate / maxDate / beforeShowDay, Validate будет проверять и следовать собственным правилам каждого datepicker.

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

0 голосов
/ 25 марта 2009

вы можете использовать опцию formatDate для указателя даты: http://docs.jquery.com/UI/Datepicker/formatDate

...