@atachrus

Почему в jQueryUI Datepicker событие onSelect, не видит setDate?

Подскажите такой вопрос инициализирую datepicker, после прослушиваю событие "выбора даты" - onSelect.
И если выбирать дату самостоятельно, то оно срабатывает. Но если я даты выставляю через api функцию "setDate", то событие не срабатывает.

Рабочий пример этого кода: https://jsfiddle.net/atach/mfkgyxnv/8/
$( "#datepicker" ).datepicker();
$( "#datepicker" ).datepicker( "option", "onSelect", function (dt) {
	alert("1");
});
$( "#datepicker" ).datepicker( "setDate", '03/22/2019' );
  • Вопрос задан
  • 360 просмотров
Решения вопроса 2
maximw
@maximw
https://jsfiddle.net/53xr6b0e/

$('.ui-datepicker-current-day').click();
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Во-первых,

событие не срабатывает

- так не говорят, это безграмотно. События никогда не срабатывают. Срабатывают обработчики событий.

Во-вторых, давайте зайдём с другой стороны - откуда вы взяли, что установка даты должна иметь своим следствием возникновение события? Если задумаетесь над этим вопросом, то скорее всего обнаружите, что вы себе это нафантазировали. Это несерьёзно.

Если откроете документацию, то увидите, что там вам никто не обещает вызов onSelect при вызове setDate. Так что формальный ответ на ваш вопрос прост - ну, вот так datepicker устроен. Отвечая на незаданный, но подразумевающийся вами вопрос (как добиться срабатывания onSelect при вызове setDate) - можно соорудить костыль, подменив метод setDate, где будет вызываться исходный метод, а затем выполняться какое-то действие, которое приведёт к вызову onSelect. Например:

const oldSetDate = $.datepicker._setDate;
$.datepicker._setDate = function(...args) {
  oldSetDate.apply(this, args);
  setTimeout(() => args[0].input.find('.ui-datepicker-current-day').click());
};

https://jsfiddle.net/7zge4jv9/1/

UPD. Заявка на данный функционал появилась ещё семь лет назад, но так ничего и не сделали. И не сделают уже, надо полагать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы