Событие jQuery "change": как определить, кто его назвал?

У меня есть слайдер, который используется в качестве временной линии в моем музыкальном проигрывателе. Значение min равно 0, а max vlaue - длина песни (в секундах). Каждую секунду (я делаю это с помощью таймера) ползунок перемещается, и значение устанавливается на текущее время. Эта строка кода выглядит так:

$("#sliderTime").slider("option", "value", document.sound.controls.currentPosition);

Пользователь может скользить/щелкнуть ползунок и перейти к другому пункту в песне, это путем включения функции "play (startPlayFromHere)". Это выглядит так:

$("#sliderTime").slider({
   ...
  change: function (event, ui) { play(ui.value) },
});

Проблема заключается в том, что как строка кода в таймере, так и пользователь вызывают одно и то же событие "изменения" ползунка, и пользователь не может перемещать ползунок.

Итак, мой вопрос: как определить, вызвал ли пользователь событие изменения или нет (это означает, что это таймер)?

Я надеюсь, что это достаточно ясно, Спасибо!

Ответ 1

Вы можете определить, возникло ли событие изменения вручную или программно путем тестирования event.originalEvent в обработчике изменений.

$('#slider').slider({
    change: function(event, ui) {
        if (event.originalEvent) {
            //manual change
            play(ui.value);
        }
        else {
            //programmatic change
        }
    }
});

См. fiddle.