nazar-pc / PickMeUp

Really simple, powerful, customizable and lightweight standalone datepicker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Event pickmeup-change

promo360 opened this issue · comments

Привет! Спасибо за данный модуль, лучший из datepicker'ов.

Столкнулся с ситуацией, когда нужно, чтобы при set_date срабатывало событие pickmeup-change, либо нужен доп. метод, чтобы принудительно вызывать это событие.

На данный момент все сработает хорошо, если убрать эту проверку:

if (!current_value) {

Зачем вообще она нужна?

Пример: https://jsfiddle.net/7hr6n23h/1/

На 114 строке в JS вызываю метод установки периода: setDate('month');

Он устанавливается в pickmeup через:
pickmeup('.jsPickmeupInit').set_date(date); на 109 строке,

но не срабатывает inputEl.addEventListener('pickmeup-change', function(e) { на 21 строке,

поэтому в кнопке остается надпись "Выбрать период", хотя должно быть "21 апр - 22 мая 2018".

Понял зачем нужна эта проверка, чтобы событие change не срабатывало каждый раз при фокусировке на инпуте. Нужно что-то другое придумать..

Сделал вот такой костыль https://jsfiddle.net/7hr6n23h/3/

Добавил функцию (почти копия той, что используется в pickmeup.js)

function dom_dispatch_event(element, detail) {
    var e = document.createEvent('Event');
    e.detail = detail;
    e.initEvent('pickmeup-change', false, true);
    return element.dispatchEvent(e);
  }

И вызываю эту функцию сразу после set_date, получается так:

pickmeup('.jsPickmeupInit').set_date(date);

dom_dispatch_event($('.jsPickmeupInit')[0], {
    date: date,
    formatted_date: []
});

Если есть решение лучше - буду благодарен.

Если вы ловите pickmeup-change, то у вас есть функция обработчик этого события. Вынесите её отдельно и дайте имя. После этого вызывайте не dom_dispatch_event, а эту новую функцию напрямую. Это и проще и чище в плане кода.

Спасибо, хорошая идея.

Пока закрываю issue, но не стесняйтесь комментировать дальше если необходимо. Для новых вопросов/багов создавайте новые issue.