css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
2 Июл
jQuery UI – надстройка над JavaScript-библиотекой jQuery. Она поможет создавать по настоящему интерактивные веб-приложения. Сегодня мы познакомимся с виджетом Datepicker.

Datepicker – это интерактивный календарь, который связан с полем ввода. Щелчок в поле ввода приводит к тому, что в отдельном слое открывается небольшой календарь. Выбираете нужную дату и готово – дата занесена в поле ввода.
Для начала посетим страницу настраиваемой закачки на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке Deselect all component , чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется – отмечаем чекбокс Datepicker и чекбокс UI Core.
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку Download и получаем архив. Можно испытать пример как есть, но интереснее создать свою HTML-страничку, где сначала в разделе HEAD подключить несколько файлов, которые есть в архиве.
<link type="text/css" href="css/ui-lightness/jquery-ui-1.7.2.custom.css" rel="stylesheet" /> <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script> <script src="js/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script> <script src="js/i18n/jquery-ui-i18n.js" type="text/javascript"></script>
Сначала мы подключили файл стилей одной из многочисленных тем оформления. Кроме этого мы подключили файл библиотеки и файл, в котором заключена функциональность UI Core и виджета Datepicker. И наконец, последний файл обеспечивает локализацию виджета для нужного языка. Найти его можно в полученном архиве, в папке /development-bundle/ui/i18n
Из разметки потребуется минимум – просто элемент input:
<input id="datepicker" type="text" />
Кстати, если Вы хотите, чтобы календарь не появлялся по щелчку в элементе input, а был всегда виден – просто используйте обычный элемент div:
<div id="datepicker"><div>
Связываем виджет Datepicker с нашей HTML-разметкой:
<script type="text/javascript">
$(function(){
$("#datepicker").datepicker();
});
</script>
Отлично! С настройками по умолчанию все понятно, но нам хотелось бы иметь календарь на русском языке (или, к примеру, на украинском). Давайте это сделаем:
<script type="text/javascript">
$(function(){
$.datepicker.setDefaults(
$.extend($.datepicker.regional["ru"])
);
$("#datepicker").datepicker();
});
</script>
Приведенный в примере код обеспечит поддержку русского языка, а если Вы замените ru на uk (интересно, почему не на ua?) то получите календарь уже на украинском языке.
Но вероятно Вам понадобится изменить какие-то настройки, чтобы использовать Datepicker для решения своих задач. Давайте попробуем это сделать.
<script type="text/javascript">
$(function(){
$.datepicker.setDefaults(
$.extend($.datepicker.regional["ru"])
);
$("#datepicker").datepicker({
minDate: "-30",
maxDate: "+1m +1w +3d"
});
});
</script>
Мы передали виджету две опции, названия которых говорят сами за себя – мы установили минимальную и максимальную дату, которую можно выбрать в календаре. Безусловно, полезные опции, но таких опций гораздо больше, а принцип их использования ничем не отличается от только что рассмотренного принципа. Полный список возможных опций приведен ниже:
altField – jQuery селектор для другого поля, которое должно быть обновлено, как только будет выбрана дата в Datepicker. Формат даты в этом дополнительном поле устанавливается с помощью опции altFormat.
altFormat – формат даты, который будет использоваться для опции altField. Эти настройки позволяют показывать пользователю один формат даты, тогда как для вычислений может использоваться другой формат. Полный список возможных форматов можно найти на
http://docs.jquery.com/UI/Datepicker/formatDate
appendText – текст, который будет отображаться после каждого поля выбора даты. Можно использовать, например для того, чтобы пометить поле как обязательное для заполнения.
buttonImage – адрес картинки, которая будет отображаться на кнопке, с помощью которой можно вызывать календарь. Используется совместно с опцией showOn, когда та принимает значения ‘button’ или ‘both’. Если был определен текст в опции buttonText, он становится значением атрибута alt картинки.
buttonImageOnly – если для этой опции установить значение true, то картинка, адрес которой определен в опции buttonImage, будет отображаться не на кнопке, а сама по себе.
buttonText – текст, отображающийся на кнопке, с помощью которой можно вызывать календарь. Используется совместно с опцией showOn, когда та принимает значения ‘button’ или ‘both’.
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 – массив, содержащий 2-хбуквенную аббревиатуру названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.
dayNamesShort – массив, содержащий 3-хбуквенную аббревиатуру названия дней недели, начиная с воскресенья. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.
defaultDate – устанавливает дату, которая будет подсвечена при первом открытии, если поле выбора даты пустое. Опция может быть определена через объект Date, либо как количество дней от текущего для (например +7 или -15), либо как строка значений, определяющих период (‘y’ для лет, ‘m’ для месяцев, ‘w’ для недель, ‘d’ для дней, например ‘+1m +7d’), и наконец как null для текущего дня.
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 – массив, содержащий 3-хбуквенную аббревиатуру названия месяцев. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его.
navigationAsDateFormat – по умолчанию опция имеет значение false. Если установить значение true, функция dateFormat будет примерена к значениям опций nextText, prevText и currentText с тем, чтобы отображать при навигации, например предыдущее и следующее названия месяцев.
nextText – текст, который отображается в качестве ссылки на следующий месяц. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его. Если используется файл стилей ThemeRoller’а, это значение заменяется иконкой.
numberOfMonths – эта опция определяет, сколько месяцев сразу нужно показать. Значение опции может быть просто числом или массивом, состоящим из двух элементов, которые определяют соответственно количество строк и столбцов. Например, значение [2, 3] отобразит календарь в две строки по три месяца.
prevText – текст, который отображается в качестве ссылки на предыдущий месяц. Определяется в файле локализации, если он используется, но это значение можно переопределить, явно указав его. Если используется файл стилей ThemeRoller’а, это значение заменяется иконкой.
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, на календаре будут отображаться дни предыдущего и/или следующего месяца без возможности их выбора.
stepMonths – определяет насколько месяцев сдвигать календарь при щелчке по ссылкам Следующий и Предыдущий. По умолчанию – 1.
yearRange – управление диапазоном лет, отображаемых в выпадающем списке (при использовании опции changeYear). По умолчанию используется значение ‘-10:+10′ относительно текущего года. Возможно использование и абсолютного формата, например ‘1980:2025′.
Перейдем к знакомству с событиями виджета Datepicker:
<script type="text/javascript">
$(function(){
$.datepicker.setDefaults($.extend(
$.datepicker.regional["ru"])
);
$("#datepicker").datepicker({
beforeShow: function(input) {
$(input).css("background-color","#ff9");
},
onSelect: function(dateText, inst) {
$(this).css("background-color","");
alert("Выбрано: " + dateText +
"\n\nid: " + inst.id +
"\nselectedDay: " + inst.selectedDay +
"\nselectedMonth: " + inst.selectedMonth +
"\nselectedYear: " + inst.selectedYear);
},
onClose: function(dateText, inst) {
$(this).css("background-color","");
}
});
});
</script>
В примере мы передаем виджету сразу три опции, в которых определены callback-функции. В опции beforeShow определена функция, которая будет вызвана перед отображением календаря. С помощью css-свойства background-color, эта функция установит желтый цвет фона для элемента input. В опции onSelect определена функция, которая будет вызвана в момент выбора какой-либо даты в календаре и передаст пустое значение css-свойству background-color, возвратив его в начальное состояние. И, наконец, в опции onClose определена функция, которая вызывается при закрытии календаря, если никакое значение выбрано не было. Она тоже вернет css-свойство background-color в его начальное состояние.
Но, обратите внимание, все callback-функции принимают некоторые аргументы. С ними стоит познакомиться немного подробнее.
В опции beforeShow функция принимает в качестве аргумента объект, характеризующий элемент input. В примере мы указали этот объект в качестве селектора jQuery и получили, таким образом, возможность работать с его css-свойствами с помощью методов библиотеки.
В опции onSelect функция принимает два аргумента. Первый аргумент dateText – строка, представляющая собой тот текст, который появится и в элементе input. Второй аргумент – объект datepicker. В том же примере показано, как можно обратиться к некоторым из свойств этого объекта.
Функция, определенная в опции onClose принимает те же два аргумента, что и функция из опции onSelect.
И еще одно важное обстоятельство для callback-функций, определенных в опциях onSelect и onClose – в контексте этих функций ссылка this указывает на объект, характеризующий элемент input.
Ниже приведены описания всех возможных событий для виджета Datepicker.
beforeShow – здесь можно определить функцию, которая будет вызываться перед открытием календаря. Функция принимает в качестве аргумента объект, характеризующий текстовое поле ввода с которым работает виджет.
beforeShowDay – в этой опции можно определить пользовательскую функцию, которая будет принимать в качестве аргумента выбранную дату. Функция должна возвратить массив, где элемент с индексом [0] – true или false показывает, возможен или нет выбор этой даты. Элемент с индексом [1] содержит имя класса (классов) для отображения даты. Элемент с индексом [2] (опционально) – текст всплывающей подсказки для даты. Функция будет вызываться для каждой даты в календаре в момент наведения указателя мыши.
onChangeMonthYear – здесь можно определить функцию, которая будет вызываться при смене месяца или года в календаре. Функция принимает три аргумента. Первые два аргумента – это новые значения года и месяца, третий аргумент – объект datepicker.
onClose – в этой опции определяется функция, которая будет вызвана, когда календарь был закрыт без выбора какой-либо даты.
onSelect – в этой опции определяется функция, которая будет вызвана, когда в календаре выбрана какая-либо дата.
Теперь можно поговорить о методах виджета Datepicker. Давайте добавим в наш HTML-код обыкновенную ссылку:
<a href="#">Открыть в диалоге</a>
и используем вот такой javascript-код:
<script type="text/javascript">
$(function(){
$.datepicker.setDefaults(
$.extend($.datepicker.regional["ru"])
);
$("#datepicker").datepicker({
changeYear: true
});
$("a").click(function(){
$("#datepicker").datepicker(
"dialog",
"23.04.2009",
function(){
alert("Событие onSelect");
},
{ showButtonPanel: true },
[300, 300]
);
});
});
</script>
В приведенном примере мы демонстрирует работу метода dialog. Мы вызываем этот метод при щелчке на ссылке Открыть в диалоге. Первый аргумент – это название метода, второй аргумент textDate – дата на которой по умолчанию будет открываться календарь. Остальные три аргумента необязательные, но мы познакомимся и с ними. В аргументе onSelect можно передать callback-функцию, которая будет вызвана при выборе конкретной даты в календаре. В аргументе settings можно передать объект с новыми настройками виджета, которые будут применены к календарю, который будет открыт в диалоговом окне. И, наконец, последний аргумент pos – здесь можно задать координаты, в которых будет появляться календарь. Координаты можно задавать числами, но если передать в функцию, вызываемую по щелчку на ссылке объект event, то можно будет определить координаты, используя свойства объекта event. Например, использовать event.clientX и event.clientY.
Далее приведены описания всех методов виджета Datepicker.
destroy – .datepicker(‘destroy’) полностью удаляет всю функциональность виджета Datepicker. Возвращает элементы в состояние, предшествующее инициализации.
disable – .datepicker(‘disable’) временно запрещает использование всей функциональности виджета. Вновь разрешить ее использование можно с помощью метода enable.
enable – .datepicker(‘enable’) разрешает использование всей функциональности виджета, если ранее она была запрещена с использованием метода disable.
option – .datepicker(‘option’, optionName, [value]) с помощью этого метода можно получить или установить значение любой опции виджета после инициализации.
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 может быть число, определяющее количество дней от текущей даты (например: +7 или -14) или строка, определяющая период (‘y’ для лет, ‘m’ для месяцев, ‘w’ для недель, ‘d’ для дней, например ‘+1m +7d’). Значение null установит текущую дату.
Вот и все. Разве что сказать, что для управления календарем можно использовать горячие клавиши:
- page up/down – предыдущий/следующий месяц;
- ctrl+page up/down – предыдущий/следующий год;
-ctrl+home – выбор текущего месяца или открытие календаря после того как он был закрыт;
- ctrl+left/right – предыдущий/следующий день;
- ctrl+up/down – предыдущая/следующая неделя;
- enter – выбор отмеченной даты;
- ctrl+end – закрытие и удаление даты из поля ввода;
- escape – закрытие календаря без выбора даты;
Отзывов (91) на «jQuery UI – виджет Datepicker»
Не подскажите как сделать, чтоб при нажатии на кнопку Сегодня в инпут вставлялась текущая дата?
Штатного метода для выполнения этой операции нет, но можно попробовать фантазировать самостоятельно. У меня получилось примерно так:
$("button.ui-datepicker-current") .live("click", function(){ $("#datepicker").datepicker("setDate", "+0d"); });В более старых версиях этого плагина поддерживалась вставка временного интервала. От даты до даты. ( видел в интернете). Почему то в новой версии такой возможности нет. Или я ошибаюсь?
Сам удивлен, возможность-то была полезная, но я тоже не обнаружил интервала…
Попытался использовать данный виджет совместно с элементом ввода в диалоговом окне. Оказалось, что календарь открывается под окном. Не подскажите как поправить?
Хороший календарь, но мне понадобился несколько друой: статический (который постоянно отображается на странице и не привязан к конкретному input), и я написал свой jQuery calendarLite плагин
Если кому понадобится – пользуйтесь на здоровье!
To Viking: Я в отпуске сейчас, в Крыму. Связь хоть и есть, но не без проблем. Числа 22-го буду на месте. Тогда постараюсь помочь чем смогу.
Отдыхать тоже надо, верно?
2 Viking
я сию неприятность решаю через css
/*Чтоб пикер нормального размера рисовался*/
div.ui-datepicker{
font-size:12px;
font-family: ‘Tahoma’, Verdana;
}
/*Решение траблы с z-index*/
#ui-datepicker-div {
z-index: 9999;
display: none;
}
Впрочем, тоже самое можно и средствами джейквери навоять.
через
font-family: ‘Tahoma’, Verdana;
}
/*Решение траблы с z-index*/
#ui-datepicker-div {
z-index: 9999;
display: none;
}
Всем огромное спасибо! помогло
Насчет плагинов UI – слишком много они весят. Я предпочитаю вместо того, чтобы подключать сам UI использовать отдельные jQuery-плагины.
Тогда развивайте мысль…. Например вместо UI Draggable Вы используете…. Что?
Привет! Спасибо за урок. Подскажи как без установки локализации задать формат даты dd.mm.yy. Спасибо!
Используйте опцию dateFormat – в статье написано как и где посмотреть все доступные форматы…
Извините за оффтопик.
Начал изучения jquery с Вашего сайта.
Сейчас наткнулся на The Yahoo! User Interface Library
http://developer.yahoo.com/yui/
Не могли бы Вы оценить преимущества и недостатки той и иной библиотеки. Спасибо.
Знаете, не мог бы…. Для того чтобы сравнивать – надо знать обе библиотеки, а Yahoo UI я к сожалению практически не знаю…
К вопросу о dateRange или Интервале дат.
Они убрали этот функционал с целью соблюдать стандартизацию кода и общей модели. Но обещают вернуть в виде некого другого компонента в следующих версиях…
Вопрос: как получить значение даты в мили- или просто секундах с 1 января 1970 года (unix timestamp формат)? Только парсить значение? почему-то объект Date не умеет понимать UTC-формулировку которую возвращает getDate. А так хочется избежать накладок с форматами даты при сохранении на сервере…
2 alexander
Все что ниже, ИМХО чистейшее и ненавязчивое. ))
Посмотрите повнимательнее на EXTJS – немного из другой категории (рич веб апликейшнс) – много весит, но и много приятностей и вкусностей. Инфы найти можно много.
Теперь на счет сабжа – yui. По моему скромному мнению этот фреймворк совместно с джейквери наиболее продуман и доведен до ПРАКТИЧЕСКОЙ реализации. Мой выбор – джейквери. Но а Вы сами решайте. Есть хорошая статейка Хавьера Рохаса. Не совсем свежая, но там все по делу ))
http://wiki.freaks-unidos.net/javascript-libraries
Здравствуйте Gennady! Спасибо за Ваш труд, очень помогает.
Только вот возникла одна трабла… не получается решить. В общем.. Хочу сделать так, что бы при клике на определенную дату всплывал alert с текстом (выбранной даты). Попробовал разное, но не получается )). Заранее благодарю.
Здравствуйте!
Большой проблемы в этом нет. Найдите в статье это место: «… В опции onSelect функция принимает два аргумента …» и пример кода, который находится выше. Там показан практически Ваш случай…
о_ОО спасибо огромное. Проблема оказывается в том что $(«#datepicker»).datepicker({… использовал повторно, первый работал а второй с алертом нет
Виджет нужный. Использую на сайте. Но вот имею такую проблему – большинство посетителей сайта в англицком 0, установил локализацию виджета, но она ведь utf-8, а сайт ср-1251. Что делать – вместо дней, месяцев и т.д. – крякозяблины. С iconv дружу, но как тут ее прикрутить?
Буду признателен за ответ
Я делал следущее в подобной ситуации. Пересохранил скрипт виджета копированием в новый файл в русской кодировке. Кракозяблины пропали.
Попробовал. Получилось. Только не сам скрипт виджета, а локализацию. О как
Если использую:
changeYear: «true»
то у меня месяц «съежает» из одной строки в следующую строку и получается очень некрасиво. Как это можно победить?
Прошу прощения, не
changeYear: “true”
а
changeMonth: «true»
Работой со стилевым оформлением конечно. Попробуйте задать размер шрифта поменьше например.
Gennady, спасибо, еще бы знать где это делать)
В примере есть стилевой файл jquery-ui-1.7.2.custom.css
Найдите там раздел Component containers и попробуйте поменять значение для font-size в правиле для элементов select.
Спасибо! Теперь такая пробема: открывается сам календарик секунд 3-5. Очень долго. Не пойму в чем причина может быть
Причем тормозит в ИЕ, в Опере работает шустро достаточно
Что, после того как размер шрифта поменяли что ли???
Что может быть за прикол кто подскажет, к форме прикреплён Датапикер, и вот в чём прикол ко всей странице добавляется в конце одна пустая строчка, тойсть как бы , получается типа не красиво когда внизу залина картинка по низу то есть белая строчка, но когда форма с эффектом нажимается то она пропадает, помогите
Причина(04.08.2009 в 19:17) немного понятнее стала но не решена, первый раз когда наживается то Дата выпадает не под формой а на строчку на две выше!
Женя, причина скорее всего в стилевом оформлении, вернее в каком-либо противоречии между основными стилями страницы и стилями Datepicker’а… Например подобное частенько бывает, если использовать position:absolute для элемента не указав явно hjsition:relative для его родителя. Может и у Вас что-то в этом роде. Но то что проблема именно в стилях – это по-моему на 100%.
2 Cтас
В ослике анимация вообще ведет себя отвратно. ))
Может поможет такое решение?
var isMSIE =/*@cc_on!@*/0;
$(«#xyz»)
.datepicker({
changeMonth:!isMSIE,
changeYear:!isMSIE,
duration: »
});
From Gennady
Попробую посмотреть, если не получится закачаю файлы на хост посмотреть!
Gennady!
Если у Вас есть время и желание заскочите сюда http://mabp.kiev.ua/2008/12/29/jquery-ui-datepicker/ Там есть кое о чём подумать =)
Добрый день! Я использую datepicker не для формы, а в отдельном div, как простой календарь.
Не подскажете, как сделать дни календаря ссылками определённого вида, например чтобы при нажатии на день, пользователь переходил на «mysite.ru/?date=Выбранная дата»?
Роман:
В блоке инициализации нужно добавить следующую функцию:
$(function() {
$(‘#datepicker’).datepicker({
onSelect: function(){window.location.href = ‘http://mysite.ru/?data=’+$(this).val()}
});
});
Как сделать чтобы календарь появлялся левее от input’a
Т.е. куда надо вставить position:relative; left:120px; ?!
Помогите…
Приветствую! Меня интересует вот какая конструкция
есть страница.
на ней текущая дата
13 октября 2009 г.
далее
элемент input с иконкой.
в зависимости от выбора даты меняется текущая + подгружается контент Ajax
Возможно эту схему реализовать! Спасибо.
И за блог огромное спасибо!!! Полезно очень
Открыть в диалоге
используя этот метод увидел странный баг. input появляется на месте стрелки BACK
Возможно эту схему реализовать!
Возможно, почему нет? Есть опция onSelect, определяйте в ней callback-функцию, которая будет выполнять ajax-запрос и помещать полученные данные в DOM.
все понял, но написать это точно не смогу. =)
вы кстати не ответили на личное сообщение =)
Здравствуйте, я только начинаю изучать ajax и jquery, поэтому вопрос судя по всему, навреное глупый, но тем не менее, не знаю как его решить.
Если делаю все как здесь написано в html, то все прекрасно работает, но когда вставляю в php страницу, то скрипт не выполняется, фаирбаг пишет
$ is not defined
error source line: [Break on this error] $(function(){\n
как решить эту проблему? подскажите новичку, пожалуйста.
Здравствуйте slash!
$ is not defined – значит что объект/функция $ не определен. По-простому, скорее всего с путями напутали, не подключается файл библиотеки и соответственно получаете это сообщение.
Приветствую ребят!
я хочу вывести календарь в форме обрабатываемой jquery.form в ui.dialog.
$(‘#addProjectDlg’).dialog(‘open’);
$(«div > .ui-datepicker»).css(‘font-size’, ‘12px’);
$(«div > .ui-datepicker»).css(‘font-family’, ‘Tahoma, Verdana’);
$(«#ui-datepicker-div»).css(‘z-index’, ‘999999′);
$(«#ui-datepicker-div»).css(‘display’, ‘none’);
$(«#datepicker»).datepicker(«dialog»);
вроде как по идее оно все должно работать но календарь не показывается. подскажите плиз что это может быть
уже решилось
инициализировал датапикер до того как отрываю диалог
Геннадий, а вы не знаете можно ли вообще отключить анимацию в DatePicker чтобы он появлялся быстрее? Насколько я вижу showAnim: ’show’ все равно делает некоторую анимацию. Как сделать так чтобы DatePicker появлялся мгновенно?
Dymytry, есть опция duration, поставьте там значение 1 – будет открываться за 1 миллисекунду
спасибо! вот еще вопросы:
1. А как по-вашему, в чем смысл использования файлов локализации, если можно просто переназвать по-русски месяцы и дни? Наверное и порядок дней недели можно поменять на наш, или нет?
2. Как проше всего отделаться от вставки картинок в диалоги JQuery? Я загрузил их стили и библиотеки но не хочу чтобы для закрытия datepicker применялся нарисованный крестик. А без его скачивания там просто пустая кнопка..
1. Смысл файлов локализации примерно тот же, что и у собственно всякого рода плагинов. Чтобы не «париться» самому…
2. А диалог, имхо, проще самому под себя сделать, чем пользовать виджет…. Обычно бывает нужно, чтобы окошко по странице таскалось и всего-то… Так возьмите Draggable и делайте себе таких сколько угодно из обычного div’а например. И оформите как нужно. Но, ес-но, открыть-закрыть придется делать самостоятельно. Но это все равно меньше будет весить, чем сам виджет Dialog.
Здравствуйте.
Столкнулся со следующей проблемой при использовании setDate:
В статье сказано «Значением аргумента date может быть строка (например: 25.10.1917).»
После инициализации пишу
.datepicker(’setDate’, ‘11-09-2009′) – получаю «12 мая 2004″
‘11.09.2009′ – получаю «31 мая 2015″
‘2009-09-11′ – получаю «21 апреля 2015″
пробывал разные варианты, но ни один не работает.
Подскажите, пожалуйста, где я ошибаюсь.
Используются следующие настройки, их отключение не помогает:
dateFormat:’d MM yy’,
altFormat:’yy-mm-dd’,
А Вы нигде не ошибаетесь – так и есть на самом деле. Начал разбираться, полез на сайт UI jQuery, так вот там этот кусочек описания уже удален…
Поправлю в статье, чтобы не вводить в заблуждение людей.
Спасибо Вам, что обратили внимание на это.
Спасибо Вам.
Т.е. на сколько я понимаю установить дату как есть не возможно, только как сдвиг от текущей даты?
Все разобрался, нужно использовать конструкцию
.datepicker(’setDate’, new Date(‘2009-11-10′));
Спасибо за помощь.
К сожалению не могу редактировать свои комментарии,
в прошлом посте немного ошибся, Date(’2009-11-10′) с таким форматом не работает, заработало так Date(’2009 11 10′).
скажите, а как бы сделать, чтобы в ИЕ так мрачно не тормозило при открытии собственно календаря?
Выключение showAnim поможет?
кстати, скажите плз, как его вырубить?
спасибо
Насчет «выключения» анимации – см. коммент 51.
Возникла проблемка, все классно работает, НО почему-то при повторном вызове для второго input не появляется кнопка слева и нет ни какой реакции, в чем может быть причина?
по моему посту #59
в ИЕ6 лучше будет выглядеть, если задать
showAnim: «fadeIn»,
нежели эффект по умолчанию
Спасибо, Геннадий!
Может кто-то реализовывал для нескольких блоков input? Разумеется id каждого input формируется в цикле, а не фиксированное (datepicker). Как в таком случае связывать виджеты datepicker с нужными input?
Этот вопрос решается в общем несложно, Вам просто надо почитать про селекторы jQuery. Конкретнее не подскажу, поскольку не знаю, как именно формируются id у Вас.
Ребят,помогите, пожалуйста понять как же все таки установить Z индекс (UI Datepicker) для текстового поля которое находится на диалоге (UI.Dialog) То есть есть диалог на нем есть текстовое поле я вроде привязал к этому полю Datepicker , Но он появляется под окном.
То есть код был такой
+
$(«#datepicker»).datepicker();
Посмотрел советы вверху. Попытался cделать так
поменял айди и добавил строчку квери
+
$(«#datepicker»).datepicker();
$(”#datepicker”).css(’z-index’, ‘999999′);
Но теперь календарь вызжает сразу сверху на окне,
Как его прикрепить к текстовому полю и сделалть так чтобы он появлялся при над диалогом Большое спасибо.
Извиняюсь в первый раз не добавился почему то НTML
1 вариант (без скобок тегов)
div id=»dialog»
div
input name=»date» id=»datepicker» type=»text» size=»5″
div
Затем поменял но все равно не работает
div id=»dialog»
div id=»datepicker»
input name=»date» type=»text» size=»5″
div
Как его обернуть в див не могу понять Спасибо за совет еще раз.
Ребят проблему решил так как и советовали
/*Решение траблы с z-index*/
#ui-datepicker-div {
z-index: 9999;
display: none;
}
но вопрос что такое #ui-datepicker-div ? В документации он нигде не упоминается. Это что айдишник диалога по умолчанию?
Подскажите, есть ли возможность отключить выбор определенных дней и подсветить их?
Если речь идет не о разрешенном диапазоне выбора дат, который устанавливается опциями minDate и maxDate, то можно попробовать использовать beforeShowDay, где определить пользовательскую функцию. Опять же вроде не то… Функция будет вызываться в момент наведения мыши на дату, а я так понимаю, надо, чтобы был запрещен выбор каких-либо дней и это было видно заранее…
Остается попробовать включить FireBug и посмотреть на календарь – это таблица, где ячейки имеют свои классы. Например выходные дни имеют класс ui-datepicker-week-end, запрещенные для выбора дни вроде бы ui-state-disabled.
Останется добавить нужный класс к нужным дням, но когда? В beforeShow что-то делать рано – календаря еще нет, а потом только по beforeShowDay, но это не то…
Вот честно, больше ничего не могу придумать. Может кто-то еще решал задачку?
При использовании datepicker не работает комбинация ctrl+Z. Причем только в IE. В FF input остается в фокусе после выбора даты и по ctrl+z честно возвращает преидущее значение.
Можно как-то сделать чтоб и в IE работало также?
Где-то в документации написано, что в datepicker должно работать сочетание ctrl+z?
Геннадий подскажите пожалуйста я же правильно понял назначение опции altField или нет. То есть если я делаю так $(‘.selector’).datepicker({ altField: ‘#actualDate’ }); То в элемент с id #actualDate вставляестя дата из датапикера прикреплнного к элемнту с классом selector Если да то почему может не работать такой код
input id=»#actualDate» name=»date» type=»text» size=»10″
input type=»button» id=»up_datepicker» value=»V»
$(«#up_datepicker»).datepicker({ altField: «#actualDate» });
дата вставляется но в кнопку а хотелось бы в тестовое поле? Или это опция не для этого Но тогда как же понимать» jQuery селектор для другого поля, которое должно быть обновлено, как только будет выбрана дата в Datepicker»
А Вы обратите внимание на атрибут id первого элемента input….. Знак # оттуда уберите и все. Вы в altField указываете #actualDate, он честно ищет идентификатор actualDate, а у Вас такого нет, у Вас есть id #actualDate (с решеткой).
Елки палки спасибо огромное Геннадий. Блин просмотрел. (:
Геннадий не подскажите почему так. Если просто тектовое поле подписано при помощи live на событие change то событие вызывается. Но если это текстовое поле является altField для datapickera и я при помощи календаря меняю в этом поле значение то событие change для этого поля не отрабатывает. Не пойму не все ли равно как наступает change в этом текстовом поле . То ли я руками ввожу и все окей то ли datapicker перазаписывает – все равно ведь change наступило. Так где же оно? Спасибо за Ваш ответ.
Подскажу alex. Вот выдержка из документации:
Метод live(type,fn) поддерживает следующие типы событий: click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup
Метод live(type,fn) не поддерживает следующие типы событий: blur, focus, mouseenter, mouseleave, change, submit
Есть такая задача дату, получаемую с помощью datepicker записывать в ms sql. а там есть только тип данных Date Time.
Соответственно выдаётся ошибка, что формат Date не известен.
Как решить эту проблему?
Заставьте datepicker отдавать дату в нужном формате:
http://docs.jquery.com/UI/Datepicker/formatDate
Спасибо.
Но тут ещё одна проблема показалась. Работаю в asp.net. Использую altField, для добавления выбранной даты в textdox. Но не добавляется. Именно в моём проекте. Если открыть чистый проект, то там всё спокойно работает. Такое предчувствие, что скрипт не видит элемента TextBox.
Что может ему мешать? заранее спасибо
Может подскажет кто-то кто знаком с asp.net, я к сожалению, знаком на уровне – знаю, что существует…
Всем привет!
А вот такая задачка: 2 поля (id=»datepicker-in» и id=»datepicker-out»), выбираем диапазон дат (знаю как сделать одним календарем, но нагляднее двумя полями). Задумка – выбираем первую дату, автоматически открывается второй календарь.
Код:
$.datepicker.setDefaults($.extend({minDate: 0, duration: 1, showMonthAfterYear: false}, $.datepicker.regional['']));
$(«#datepicker-in»).datepicker({
onSelect: function(dateText, inst) {
//$(«#datepicker-out»).datepicker({onSelect: function(dateText, inst) {$(«#datepicker-out»).datepicker(‘hide’);}});
$(«#datepicker-out»).datepicker();
selDate = $.datepicker.parseDate($(«#datepicker-in»).datepicker(‘option’, ‘dateFormat’),dateText);
selDate.setTime(selDate.getTime() + 1 * 24 * 60 * 60 * 1000); //прибавляем день
$(«#datepicker-out»).datepicker(‘option’, ‘minDate’, selDate);
$(«#datepicker-out»).click();
//$(«#datepicker-out»).datepicker(’show’);
}
});
Вызов эвента онклик не открывает второй календарь, после выбора даты в первом, хотя календарь инициализируется. Закоменченый вызов метода датапикера show срабатывает, но почему то после такого метода открытия календаря он не закрывается ни после выбора даты (хотя дату выбирает), ни после клика мимо него…
Открывать второй datepicker по выбору даты в первом вполне даже можно. Попробуйте вот такой минимальный код (потом нарастите его):
$("#datepicker1").datepicker({ onSelect: function(dateText, inst) { $("#datepicker2").datepicker("show"); } }); $("#datepicker2").datepicker();Не закрывает второй календарь после выбора в нем даты, при вызове его методом ’show’… я об этом и писал как раз.. и в вашем примере тоже. В этом и проблема, хоть и понимаю, что все должно работать по логике вещей.
Подскажите как сделать, чтобы при использовании элемента div календарь появлялся по щелчку на этот div. В моем случае это TextBox
а если id у инпута например id=»datepicer[20]» то не работает. Почему?
вообще задача такая: на странице может быть произвольное кол-во инпутов независимых друг от друга, как-то можно менять дату в этих инпутах датапикером?
$(«#some\\[id\\]«) // а это работает!
Подскажите пожалуйста, почему inst.selectedMonth выдает месяц в интервале от 0 до 11?
Не готов объяснить почему именно здесь вот так… Наверное разница в каких-то стандартах…
Вот навскидку помню, что в пхпшной функции date, w – день недели от 0 до 6 (с воскресенья по субботу), а N – от 1 до 7 (с понедельника по воскресенье)…
Ну и тут что-то вроде этого вероятно. Просто надо это иметь ввиду и все…
Обсуждение статьи можно продолжить на форуме jQuery.