Прослушиватель событий, когда другое событие меняет мое входное значение - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть вход с классом datepicker, который выглядит следующим образом:

<input class="ui-calendar hasDatepicker" type="text" name="date" id="date">

Мне нужно охватить все сценарии, когда это входное значение изменяется.Итак, у меня есть .datepicker onSelect (используется при выборе даты с помощью календаря datepicker) и простые onChange (используются при вводе даты с клавиатуры):

$('#date').datepicker({
  onSelect: function() {
    console.log('datepicker onSelect event');
  }
});

и

$('#date').on('change', function() {
  console.log('onChange event');
});

Теперь проблема в том, что у меня есть отдельная кнопка:

<a href="#" onclick="setDate('date', '2018-12-05', '2018-12-05'); return false;">Set date</a>

И эта функция setDate изменяет значение моего ввода DatePicker.

Как мне перехватить это событие setDate, не помещая никакого кода в саму функцию setDate?Я попытался добавить прослушиватель на мой ввод datepicker, но он ловит только те значения, которые я ввел с клавиатуры.

1 Ответ

0 голосов
/ 05 декабря 2018

Во-первых, не используйте on* атрибуты событий, прикрепляйте обработчики событий незаметно.

Во-вторых, вы должны setDate() изменить дату через библиотеку datepicker(), тогда вы получите это поведение бесплатно:

<a href="#" class="set-date" date-foo="date" date-date1="2018-12-05" data-date2="2018-12-05">Set date</a>
$('.set-date').click(function(e) {
  e.preventDefault();
  $("#date").datepicker("setDate", $(this).data('date1'));
});

В качестве альтернативы вы можете установитьval() на входе и вручную trigger() a change событие.

$('.set-date').click(function(e) {
  e.preventDefault();
  $('#date').val($(this).data('date1')).trigger('change');
});
...