Необходимо применить на веб-странице виджет Datepicker.
Datepicker — это интерактивный календарь, который связан с полем ввода. Щелчок в поле ввода приводит к тому, что в отдельном слое открывается небольшой календарь. Выбираете нужную дату, щелкаете мышью в любом месте страницы (или нажимаете клавишу <Esc>) и готово — дата занесена в поле ввода. Внешний вид виджета Datepicker в одном из вариантов оформления представлен на рис. 17.2.
Решение
Решение этой задачи приведено в листинге 17.2.1. Для стилевого оформления выбрана тема "lightness".
Рис. 17.2. Виджет Datepicker в одном из вариантов оформления
Листинг 1 7 .2 .1 . Использование виджета Datepicker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru"> <head> <title>example-17-2-1</title> <content> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.9.custom.css" rel="stylesheet" /> <script src="js/jquery-1.4.4.min.js" type="text/javascript"></script> <script src="js/jquery-ui-1.8.9.custom.min.js" type="text/javascript"></script> <script src="js/i18n/jquery-ui-i18n.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $("#datepicker").datepicker(); }); </script> </head> <body> <p>Дата: <input id="datepicker" type="text" /></p> <a href="#">Открыть в диалоге</a> </body> </html> |
Обсуждение
Сначала мы подключили файл стилей 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 — (Профессиональное программирование)
Похожие посты:
- Изменение высоты строки (межстрочного интервала) в тексте (0)
- Изменение стиля маркеров списка или удаление маркеров (0)
- Удаление отступов от края страницы (0)
- Выбор единиц измерения размера шрифтов:пикселы, пункты, пики или что-то другое (0)
- Изменение вида элементов формы с помощью CSS (0)
- Отображение строкового элемента как блочного, и наоборот (0)
- Справочник по обобщенным представлениям Django (0)