Вы здесь

Обработка события ondblclick для JQuery UI Datepicker

0

Заранее извиняюсь, что вопрос к Drupal имеет косвенное отношение ...

В общем, для написания виджета использую JQuery UI Datepicker.

И столкнулся с такой проблемой, как невозможность повесить на этот Datepicker обработку события ondblclick. А планируется сделать так, чтобы по двойному нажатию на календарь в очередная дата добавляется в списке. И таким образом можно довольно быстро задавать много разных дат.

Так вот, никто не сталкивался с такой проблемой ?
Или может, лучше поискать какой-нибудь другой календарь на JQuery, который бы ondblclick поддерживал ?

Версия Drupal: 
7.x
Категория: 
Javascript
Вопрос задан 21.06.2015 - 11:30

в чём выражается невозможность повесить событие? куда вешаете? как вешаете? что хотите реализовать?

Комментарий оставлен 21.06.2015 - 11:36

Вот фрагмент кода

// Инициализация календаря
$(".yrv-dates-calendar", context).datepicker({
});

$(".yrv-dates-calendar", context).dblclick(function(){
var currentDate = $(".yrv-dates-calendar", context).datepicker( "getDate" );
console.log(currentDate);
return false;
});

Хочу, чтобы при двойном щелчке на цифру календаря можно было провести какие-либо действия с датой - например, добавить дату в
или хотя бы вывести эту дату в console.log

Комментарий оставлен 21.06.2015 - 13:55

.yrv-dates-calendar - это селектор поля, у календаря свой div с совершенно другим селектором

Комментарий оставлен 21.06.2015 - 14:23

Ответы

0

Вангую:

Всплывающий элемент календаря не подгружается в DOM. Поэтому скрипт его и не видит.

Джедай квери не менее 1.7

$('body').on('dblclick','СЕЛЕКТОР НУЖНОГО ЭЛЕМЕНТА', function() {
  alert('Алилуйа!');
});
Ответ дан 21.06.2015 - 11:47
Аватар пользователя SAM
SAM
212

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

То есть, пользователь сделал двойной щелчок на цифре календаря и эта дата записалась в список.

Комментарий оставлен 21.06.2015 - 13:53

Разметку покажи. Во всяком случае можно же достать значение из разметки. Просто это не через .val() будет.

Комментарий оставлен 21.06.2015 - 14:01

Через $('td[data-handler=selectDay] a').text() бери число.
Кстати надо будет наверное на обычный клик поставить return false; чтобы ссылка не срабатывала. Или вообще переписать и твою функцию вещать не на двойной клик, а на одинарный. Но тут выбирать тебе.

Комментарий оставлен 21.06.2015 - 15:07

Тут проблема в том, что не могу понять, на какой селектор вешать dblclick - нигде это не срабатывает.

Комментарий оставлен 21.06.2015 - 15:21

Ну по идее на a должен срабатывать. Но может не срабатывать из-за одинарного клика. Отключи обычный click и попробуй.

Комментарий оставлен 21.06.2015 - 15:23

Не получилось подключить на a.
Да и вообще, если компонент эту возможность не поддерживает в принципе, считаю что-то к чему-то подключать сомнительной затеей.

Кстати, удалось эту задачу решить нестандартным способом.
У datepicker есть событие onSelect.
Добавил код, который бы учитывал время срабатывания данного события и если между соседними событиями прошло менее 500 миллисекунд, то считается, что был "двойной клик".
Потестировал, вроде бы, работает.

var timePrev=0;

      $(".yrv-dates-calendar", context).datepicker({
        onSelect:function(date, inst){

          var timeNow = $.now();

          // Срабатывает двойной клик
          if (timeNow - timePrev < 500)
          {
            var currentDate = $(".yrv-dates-calendar", context).datepicker( "getDate" );
            console.log(currentDate);
          }
          timePrev = timeNow;
        }
      });

Комментарий оставлен 21.06.2015 - 16:27