Необходимо применить на веб-странице виджет Datepicker.

Опубликовал: Sunday, June 23, 2024 в категории jQuery, Подборка рецептов | Пока нет комментариев

Datepicker — это интерактивный календарь, который связан с полем ввода. Щелчок в поле ввода приводит к тому, что в отдельном слое открывается небольшой календарь. Выбираете нужную дату, щелкаете мышью в любом месте страницы (или нажимаете клавишу <Esc>) и готово — дата занесена в поле ввода. Внешний вид виджета Datepicker в одном из вариантов оформления представлен на рис. 17.2.

Решение

Решение этой задачи приведено в листинге 17.2.1. Для стилевого оформления выбрана тема "lightness".

Рис. 17.2. Виджет Datepicker в одном из вариантов оформления

Листинг 1 7 .2 .1 . Использование виджета Datepicker

Обсуждение

Сначала мы подключили файл стилей css/ui-lightness/jquery-ui-1.8.9. custom.css одной из многочисленных тем оформления. Вы можете выбрать для себя любую тему, которая придется вам по душе. Кроме этого мы подключили файл библиотеки — js/jquery-1.4.4.min.js и файл js/jquery-ui-1.8.9.custom.min.js, в котором заключена функциональность виджета Datepicker. Файл js/i18n/jquery-ui-i18n.js обеспечивает локализацию виджета для нужного языка.

Datepicker не предъявляет особенных требований к HTML-разметке. Обычное поле ввода — элемент input.

За связь виджета с HTML-разметкой отвечает фрагмент кода, приведенный в листинге 17.2.2.

Лис ти нг 1 7 .2 .2 . Использование виджета Datepicker

[code language=”javascript”]

В листинге 17.2.2 приведен пример кода, который реализует виджет с настройками по умолчанию. Отлично, но мы хотим видеть в календаре названия месяцев и дней недели, написанных по-русски (или по-украински). Листинг 17.2.3 иллюстрирует пример локализации виджета для русского языка.

Листинг 1 7 .2 .3 . Использование виджета Datepicker

[code language=”javascript”]

Приведенный в листинге 17.2.3 код обеспечит поддержку русского языка, а если вы замените ru на uk, то получите календарь уже на украинском языке.

Но, чтобы решить свои задачи, вам, вероятно, понадобится изменить какие-то настройки Datepicker. Давайте попробуем это сделать (листинг 17.2.4).

Листинг 1 7 .2 .4 . Использование виджета Datepicker

[code language=”javascript”]

В примере из листинга 17.2.4 мы передали виджету две опции, названия которых говорят сами за себя — мы установили минимальную и максимальную дату, которую можно выбрать в календаре. Безусловно, данные опции полезны, но таких опций гораздо больше, а принцип работы с ними аналогичен рассмотренному в листинге 17.2.4. Полный список возможных опций приведен в табл. 17.4.

Таблица 17.4. Опции виджета Datepicker

Опция

Описание

disabled

Значение по умолчанию — false. Если установить значение true, то при инициализации функциональность виджета Datepicker будет недоступна, однако ее можно включить впоследствии, например, при выполнении какого-либо условия

altField

jQuery селектор для другого поля, которое должно быть обновлено, как только будет выбрана дата в Datepicker. Формат даты в этом дополнительном поле устанавливается с помощью опции altFormat

altFormat

Формат даты, который будет использоваться для опции altField. Эти настройки позволяют показывать пользователю один формат даты, тогда как для вычислений может быть установлен другой формат. Полный список возможных форматов можно найти на http://docs.jquery.com/UI/Datepicker/formatDate

appendText

Текст, который будет отображаться после каждого поля выбора даты. Можно, например, пометить поле как обязательное для заполнения

autoSize

Значение по умолчанию — false. Если установить значение true, поле ввода будет автоматически изменять свой размер, чтобы полностью вместить выбранную дату в текущем формате

buttonImage

Адрес картинки, отображающейся на кнопке, с помощью которой можно вызывать календарь. Используется совместно с опцией showOn, когда та принимает значения ‘button’ или ‘both’. Если был определен текст в опции buttonText, он становится значением атрибута alt картинки

buttonImageOnly

Если для этой опции установить значение true, то картинка, адрес которой определен в опции buttonImage, будет отображаться не на кнопке, а сама по себе

Таблица 17.4 (продолжение)

Опция

Описание

buttonText

Текст, отображающийся на кнопке, с помощью которой можно вызывать календарь. Используется совместно с опцией showOn, когда та принимает значения ‘button’ или ‘both’

calculateWeek

В этой опции можно определить собственную функцию, которая будет вычислять порядковый номер недели в году. По умолчанию для вычисления используется формат ISO 8601

changeMonth

Если в этой опции передать значение true, то можно выбирать месяц из выпадающего списка

changeYear

Если в этой опции передать значение true, появится возможность выбирать год из выпадающего списка

closeText

Эта опция используется совместно с showButtonPanel, если последняя имеет значение true. Значение опции closeText определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его

constrainInput

По умолчанию опция имеет значение true и принуждает строго соблюдать формат даты, определенный в опциях виджета, в текстовом поле ввода. Чтобы иметь возможность не соблюдать этот формат, следует установить опцию в false

currentText

Эта опция используется совместно с showButtonPanel, если последняя имеет значение true. Значение опции currentText определяется в файле локализации, когда он присутствует, но это значение можно переопределить, явно указав его

dateFormat

Определяет формат даты. Значение опции dateFormat определяется в файле локализации, если он задействован, но это значение можно переопределить, явно указав его. Полный список возможных форматов можно найти на http://docs.jquery.com/UI/Datepicker/formatDate

dayNames

Массив, содержащий полные названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он есть, но это значение можно переопределить, явно указав его

dayNamesMin

Массив, содержащий двухбуквенную аббревиатуру названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его

dayNamesShort

Массив, содержащий трехбуквенную аббревиатуру названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он задействован, но это значение можно переопределить, явно указав его

defaultDate

Устанавливает дату, которая будет подсвечена при первом открытии, если поле выбора даты пустое. Опция может быть определена через объект Date, либо как число дней от текущего дня (например

+7 или 15), либо как строка значений, определяющих период (‘y’ для лет, ‘m’ для месяцев, ‘w’ для недель, ‘d’ для дней, например ‘+1m +7d’), и, наконец, как null для текущего дня

Таблица 17.4 (продолжение)

Опция

Описание

duration

Длительность эффекта анимации при открытии (закрытии) календаря. Может принимать значения в виде строки — ‘fast’, ‘normal’ (по умолчанию), ‘slow’ или в виде числа в миллисекундах. Если передать пустую строку, календарь будет открываться и закрываться без эффекта анимации

firstDay

Опция устанавливает первый день недели: воскресенье — 0, понедельник — 1,… Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его

gotoCurrent

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

hideIfNoPrevNext

Если вы ограничиваете диапазон доступных дат с помощью опций minDate и maxDate, то при достижении края диапазона стрелки "Назад" и "Вперед" становятся неактивными. Но их можно и совсем скрыть, передав в опции hideIfNoPrevNext значение true

isRTL

Для этой опции необходимо установить значение true, если используется язык с написанием справа налево. Определяется в файле локализации, если он задействован

maxDate

Устанавливает максимальную возможную для выбора дату через объект Date, или как число дней от текущего (например +7), или как строку значений, определяющих период (‘y’ для лет, ‘m’ для месяцев, ‘w’ для недель, ‘d’ для дней, например ‘+1y +1m’), или null при отсутствии ограничения

minDate

Устанавливает минимальную возможную для выбора дату через объект Date, или как число дней от текущего (например -7), или как строку значений, определяющих период (‘y’ для лет, ‘m’ для месяцев, ‘w’ для недель, ‘d’ для дней, например ‘-1y -1m’), или null при отсутствии ограничения

monthNames

Массив, содержащий полные названия месяцев. Определяется

в файле локализации, если он используется, но это значение можно переопределить, явно указав его

monthNamesShort

Массив, содержащий трехбуквенную аббревиатуру названия месяцев. Определяется в файле локализации, если он задействован, но это значение можно переопределить, явно указав его

navigationAsDateFormat

Значение по умолчанию — false. Если установить значение true, функция dateFormat будет примерена к значениям опций nextText, prevText и currentText, чтобы отображать при навигации, например, предыдущее и последующее названия месяцев

nextText

Текст, который отображается в качестве ссылки на следующий месяц. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его. Если подключен файл стилей ThemeRoller, это значение заменяется иконкой

Таблица 17.4 (продолжение)

Опция

Описание

numberOfMonths

Эта опция определяет, сколько месяцев сразу нужно показать. Значение опции может быть просто числом или массивом, состоящим из двух элементов, которые определяют соответственно количество строк и столбцов. Например, значение [2, 3] отобразит календарь в две строки по три месяца

prevText

Текст, который отображается в качестве ссылки на предыдущий месяц. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его. Если подключен файл стилей ThemeRoller, это значение заменяется иконкой

selectOtherMonths

Значение по умолчанию — false. Если указать true, то даты предыдущего/следующего месяца можно будет выбирать так же, как и даты текущего месяца. Используется только совместно с showOtherMonths: true

shortYearCutoff

Значение по умолчанию +10. Эта опция возможна только при установке в dateFormat двузначной записи года и играет роль компенсатора для определения века. Если значение передано в виде числа, используется как есть. Если значение передано в виде строки, конвертируется в число и добавляется к текущему значению года. После того как значение определено, все данные, выступающие в качестве значения года, и меньшие и равные ему считаются годами текущего века. Значения бо´ льшие — считаются годами предыдущего века

showAnim

Определяет тип анимации при открывании календаря. Значение по умолчанию — show (при закрывании будет использован hide). Без подключения дополнительных файлов возможны эффекты ‘slideDown’ и ‘fadeIn’ (‘slideUp’ и ‘fadeOut’ — при закрывании). Также возможны любые эффекты jQuery UI Effects при условии их дополнительного подключения

showButtonPanel

Установка значения true для этой опции приведет к тому, что будет показана панель с двумя кнопками — переход к сегодняшней дате и закрытие календаря

showCurrentAsPos

Когда отображаются сразу несколько месяцев, число, переданное в этой опции, определяет позицию текущего месяца. Значение

по умолчанию — 0 (текущий месяц отображается в верхнем левом углу)

showMonthAfterYear

Значение по умолчанию — false (в заголовке название месяца идет перед годом). При указании значения true название месяца будет следовать за годом

showOn

Значение по умолчанию — ‘focus’ (календарь открывается при щелчке в поле ввода). Другие возможные значения — ‘button’ и ‘both’. Рядом с полем ввода появится кнопка. В первом случае календарь будет открываться по щелчку на кнопке, а во втором случае как по щелчку на кнопке, так и при получении фокуса полем ввода

showOptions

Если вы применяете один из эффектов jQuery UI Effects, с помощью этой опции ему можно передать дополнительные настройки. Например: showOptions: {direction: ‘up’}

Опция

Описание

showOtherMonths

Значение по умолчанию — false. Если указать true, то на календаре будут отображаться дни предыдущего и/или следующего месяца без возможности их выбора. Чтобы иметь возможность выбора этих дат, используйте опцию selectOtherMonths

showWeek

Значение по умолчанию — false. Установка значения true приведет к добавлению дополнительной колонки, где будет отображаться порядковый новер недели в году. Для определения собственной функции вычисления порядкового номера недели предусмотрена опция calculateWeek

stepMonths

Определяет, насколько месяцев сдвигать календарь при щелчке по ссылкам Следующий и Предыдущий. По умолчанию — 1

weekHeader

В этой опции можно определить свой текст, который будет выводиться в заголовке колонки с порядковыми номерами недель. Опция используется вместе с showWeek: true

yearRange

Управление диапазоном лет, отображаемых в выпадающем списке (при использовании опции changeYear). Значение по умолчанию — ‘-10:+10’ относительно текущего года. Возможно указание и абсолютного формата, например ‘1980:2025’

yearSuffix

В этой опции можно передать дополнительный текст, который будет отображаться в заголовке календаря, после цифр года

Попробуем теперь заставить виджет Datepicker реагировать на события (листинг 17.2.5).

Листинг 1 7 .2 .5 . Использование виджета Datepicker

[code language=”javascript”]

В примере из листинга 17.2.5 мы передаем виджету сразу три опции, в которых определены callback-функции. В опции beforeShow — функция, вызываемая перед отображением календаря. С помощью CSS-свойства background-color эта функция установит желтый цвет фона для элемента input. В опции onSelect — функция, которая будет вызвана в момент выбора какой-либо даты в календаре и передаст пустое значение CSS-свойству background-color, возвратив его в начальное состояние. И, наконец, в опции onClose — функция, вызываемая при закрытии календаря, если никакое значение выбрано не было. Она тоже вернет CSS-свойство backgroundcolor в его начальное состояние.

Но, обратите внимание, все callback-функции принимают некоторые аргументы. С ними нужно познакомиться немного подробнее.

В опции beforeShow функция принимает в качестве аргумента объект, характеризующий элемент input. В примере из листинга 17.2.5 мы указали этот объект в качестве селектора jQuery и получили, таким образом, возможность работать с его CSS-свойствами с помощью методов библиотеки.

В опции onSelect функция принимает два аргумента. Первый аргумент dateText — строка, представляющая собой тот текст, который появится и в элементе input. Второй аргумент — объект datepicker. В листинге 17.2.5 показано, как можно обратиться к некоторым из свойств этого объекта.

Функция, определенная в опции onClose, принимает те же два аргумента, что и функция из опции onSelect.

И еще одно важное обстоятельство для callback-функций, определенных в опциях onSelect и onClose, — в контексте этих функций ссылка this указывает на объект, характеризующий элемент input.

В табл. 17.5 приведены описания всех возможных событий для виджета Datepicker.

Таблица 17.5. События виджета Datepicker

Опция

Тип

Описание события

create

datepickercreate

Событие наступает в момент инициализации

beforeShow

function(input, inst)

Здесь можно определить функцию, которая будет вызываться перед открытием календаря.

Функция принимает в качестве аргумента объект, характеризующий текстовое поле ввода, с кото-

рым работает виджет

Опция

Тип

Описание события

beforeShowDay

function(date)

В этой опции можно определить пользовательскую функцию, которая будет принимать в качестве аргумента выбранную дату. Функция должна возвратить массив, где элемент с индексом [0] — true или false показывает, возможен или нет выбор этой даты. Элемент с индексом [1] содержит имя класса (классов) для отображения даты, элемент с индексом [2] (опционально) — текст всплывающей подсказки для даты. Функция будет вызываться для каждой даты в календаре в момент наведения указателя мыши

onChangeMonthYear

function(year, month, inst)

Здесь можно определить функцию, которая будет вызываться при смене месяца или года в календаре. Функция принимает три аргумента. Первые два аргумента — это новые значения года и месяца, третий аргумент — объект datepicker

onClose

function(dateText, inst)

В этой опции определяется функция, которая будет вызвана, когда календарь был закрыт без выбора какой-либо даты

onSelect

function(dateText, inst)

В этой опции определяется функция, которая будет вызвана, когда в календаре выбрана какая-либо дата

Познакомимся с методами, которые предлагает виджет Datepicker. В листинге 17.2.6 приведен пример использования одного из методов.

Листинг 1 7 .2 .6 . Ис п ол ьзование виджета Datepicker

[code language=”javascript”]

Пример из листинга 17.2.6 демонстрирует работу метода dialog. Мы вызываем этот метод при щелчке на ссылке Открыть в диалоге. Первый аргумент — это название метода, второй аргумент textDate — дата, на которой по умолчанию будет открываться календарь. Остальные три аргумента необязательные, но мы рассмотрим и их. В аргументе onSelect можно передать callback-функцию, которая будет вызвана при выборе конкретной даты в календаре. В аргументе settings можно передать объект с новыми настройками виджета, которые будут применены к календарю, открытому в диалоговом окне. И, наконец, последний аргумент — pos — здесь можно задать координаты, в которых будет появляться календарь. Координаты можно задавать числами, но если передать в функцию, вызываемую по щелчку на ссылке, объект event, то можно будет определить координаты, через свойства объекта event. Например, event.clientX и event.clientY.

В табл. 17.6 приведены описания всех методов виджета Datepicker.

Таблица 17.6. Методы виджета Datepicker

Метод

Описание

destroy

.datepicker (‘destroy’)

Полностью удаляет всю функциональность виджета Datepicker. Возвращает элементы в состояние, предшествующее инициализации

disable

.datepicker (‘disable’)

Временно запрещает использование всей функциональности виджета. Вновь разрешить ее можно с помощью метода enable

enable

.datepicker (enable’)

Разрешает использование всей функциональности виджета, если ранее она была запрещена методом disable

option

.datepicker (‘option’, optionName, [value])

Устанавливает значение любой опции виджета после инициализации

option (‘option’, optionName)

С помощью этого метода можно получить значение любой опции виджета после инициализации

widget

Обеспечивает доступ к объекту, который представляет собой элемент с функциональностью Datepicker

dialog

.datepicker (‘dialog’, dateText, [onSelect], [settings], [pos] )

Открывает виджет Datepicker в режиме диалогового окна. В аргументе dateText передается дата, на которой должен быть открыт календарь. Остальные аргументы необязательные. В аргументе onSelect можно передать функцию, которая будет вызвана в момент выбора даты в календаре, в аргументе settings можно передать объект

с новыми настройками виджета, в аргументе pos — координаты, в которых будет открыто диалоговое окно. Здесь можно использовать события мыши, чтобы определить координаты

isDisabled

.datepicker (‘isDisabled’)

Метод возвращает значение true, если к виджету был применен метод disable, и false — в противном случае

hide

.datepicker (‘hide’, [speed])

Скрывает ранее открытый календарь

Метод

Описание

show

.datepicker (‘show’)

Открывает календарь

getDate

.datepicker (‘getDate’)

Метод возвращает дату, выбранную в календаре

setDate

.datepicker (‘setDate’, date)

Метод позволяет установить дату в календаре. Значением аргумента date может быть строка (например: 25.10.2024). Число, определяющее количество дней

от текущей даты (например: +7 или -14). Строка, опреде-

ляющая период (‘y’ для лет, ‘m’ для месяцев, ‘w’ для недель, ‘d’ для дней, например: ‘+1m +7d’). Значение null установит текущую дату

Пожалуй, можно дать еще пару полезных советов.

По умолчанию Datepicker открывается в новом слое, когда текстовое поле ввода получает фокус, и закрывается, когда это поле теряет фокус. Чтобы календарь был открыт постоянно, просто свяжите его функциональность с элементами div или span.

Управлять календарем можно посредством горячих клавиш:

❒      <Page Up>/<Down> — предыдущий/следующий месяц;

❒      <Ctrl>+<Page Up>/<Down> — предыдущий/следующий год;

❒      <Ctrl>+<Home> — выбор текущего месяца или открытие календаря после того, как он был закрыт;

❒      <Ctrl>+<Left>/<Right> — предыдущий/следующий день;

❒      <Ctrl>+<Up>/<Down> — предыдущая/следующая неделя;

❒      <Enter> — выбор отмеченной даты;

❒      <Ctrl>+<End> — закрытие и удаление даты из поля ввода;

❒      <Escape> — закрытие календаря без выбора даты.

Источник: Самков Г. А. jQuery. Сборник рецептов. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 416 с.: ил. + CD-ROM — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *