Событие-триггер при обновлении datepicker по ограничению

У меня есть jQuery UI datepicker, который использует ограничения. Средство выбора даты инициализируется и привязывается к элементу ввода с помощью настраиваемой привязки. Эти ограничения даты обрабатываются вычислениями, которые полагаются на другие значения в моей форме. Дело в том, что установив ограничения datepicker, DOM обновляет (визуально) до другого значения. Однако событие изменения, зарегистрированное для этого элемента, не запускается. Я отчаянно пытаюсь поймать это событие, чтобы соответствующим образом обновить наблюдаемое.

ko.utils.registerEventHandler(element, 'change', function() {
    console.log('this should fire when clicking the Set restrictions-button');
    var observable = valueAccessor();
    var value = $(element).datepicker('getDate');
    observable(value);
});

Я создал ручку, чтобы проиллюстрировать проблему: http://codepen.io/Egidius/pen/XdyazR?editors=1011

Нажав кнопку «Установить ограничения», вы увидите изменение даты в DOM. Однако событие не запускается этой мутацией.


person Dani    schedule 03.05.2016    source источник


Ответы (1)


Средство выбора даты пользовательского интерфейса jQuery не вызывает изменения после изменения своего значения из-за нового ограничения. Вы можете заставить его сделать это, добавив .trigger("change") или .change() в свой setRestrictions метод:

this.setRestrictions = function() {
   var minDate = new Date();
   minDate.setDate(minDate.getDate() + 5);
   $("input[name='date']")
     .datepicker('option', 'minDate', minDate)
     .trigger("change");
}

Также обратите внимание, что пользовательский интерфейс jQuery не очень разборчив при запуске onSelect: он не проверяет, действительно ли изменилось значение. Было бы неплохо проверить это самостоятельно в обработчике изменений. В качестве альтернативы вы можете установить флажок перед запуском изменения, но вам все равно придется «исправить» триггеры изменения, возникающие при нажатии на уже выбранную дату.

person user3297291    schedule 03.05.2016
comment
Потрясающие!! Большое спасибо user3297291 :). Хотя это было не то исправление, на которое я надеялся, оно работает! Я все еще задаюсь вопросом, где обрабатывается обновление даты, которое, как я вижу, происходит в моем DOM. - person Dani; 03.05.2016