#jquery-ui #mousewheel #jquery-ui-datepicker
#jquery-пользовательский интерфейс #колесо мыши #jquery-ui-datepicker
Вопрос:
Есть ли где-нибудь дополнение, которое добавляет поддержку колесика мыши в jQuery UI datepicker? (Таким образом, использование колеса мыши над календарем приводит к перемещению месяца вперед / назад.)
Список изменений, похоже, указывает, что поддержка колесика мыши была добавлена в 1.7, но похоже, что этот набор изменений на самом деле не имел ничего общего с механизмом выбора даты. Беглый поиск в версии 1.8 показывает, что встроенной поддержки колесика мыши нет.
Я знаю, что datepicker от Кита Вуда поддерживает колесо мыши, но я использую этот timepicker, который зависит от datepicker в пользовательском интерфейсе jQuery.
Ответ №1:
Это можно легко добавить, добавив следующий код в вашу готовую функцию. Он использует расширение jQuery mousewheel и добавляет прослушиватель событий в реальном времени для событий mousewheel в jQuery UI datepicker divs. Если таковое обнаружено, это запускает click
событие на кнопке предыдущий / следующий месяц.
Живая демонстрация: http://jsfiddle.net/PSFgY /
$('.ui-datepicker').live("mousewheel", function(event, delta){
if(delta < 0){
$(this).find('.ui-datepicker-next').click();
} else {
$(this).find('.ui-datepicker-prev').click();
}
event.preventDefault();
event.stopPropagation();
});
Комментарии:
1. Именно то, что мне было нужно; спасибо! Я изменил класс на
.ui-datepicker-group
(и добавил$(this).parent().find
…), чтобы колесо не запускалось при превышении части выпадающего списка с выбором времени.2. Я думаю,
delta
теперьevent.wheelDelta
Ответ №2:
Небольшое обновление: начиная с jQuery 1.7, метод .live() устарел. Используйте .on() для подключения обработчиков событий. Также мне пришлось использовать event.originalEvent.wheelDelta
для получения дельты.
$(document).on('mousewheel', '.ui-datepicker', function (event) {
var sel = event.originalEvent.wheelDelta < 0 ? '.ui-datepicker-next' : '.ui-datepicker-prev';
$(this).find(sel).click();
event.preventDefault();
event.stopPropagation();
});
Комментарии:
1. Если вы используете плагин mousewheel от brandonaaron, вы можете использовать
event.deltaY
вместо него, который может быть более совместим с различными браузерами.
Ответ №3:
Вот еще один способ справиться с проблемой, особенно когда установлены минимальные и максимальные даты:
$('.ui-datepicker').bind("mousewheel", function(e){
var delta = e.originalEvent.wheelDelta;
if(delta < 0){
$(this).find('.ui-datepicker-next').click();
} else {
$(this).find('.ui-datepicker-prev').click();
}
e.preventDefault();
});