я застрял в этой петле на некоторое время. В основном у меня есть ползунок, который выполняет какое-то действие при изменении значений ползунка. Первое, что я делаю, это проверяю, и если эта проверка не проходит, мне нужно сбросить значение ползунка. Но сброс значения ползунка меняет его! И так я застрял. Вот мой код:
Слайдер:
$(element).slider({
min: 0,
max: 10,
step: 1,
value: initialValue,
animate: false,
slide: _updateOnSlide,
change: _performAction
});
var _performAction = function(evt, ui){
if (CT.travel.atLeastOneStepPresent()){
var id = $(this).attr("id");
_updateOnSlide(evt, ui);
if (id != "travelTime"){//se è il tempo non aggiorno
CT.makeQuery();
}
CT.timeline.update();
}else{
alert("you can't do this");
$(this).slider("value", 0);
_updateOnSlide(evt, ui);
}
}
Проблема в том, что $(this).slider("value", 0);
запускает другое событие изменения! Кто-нибудь знает, как это решить?
Мне нужно использовать функцию изменения, потому что я меняю значения ползунка, нажимая кнопки, а не сдвигая его.
РЕДАКТИРОВАТЬ - evt.originalEvent для меня всегда не определено (если я использую cosole.log, это похоже на этот console.log(evt.originalEvent)) но по какой-то странной причине я вижу его, если я использую console.dir. Но, к сожалению, это не решает проблему, я добавляю сюда часть моего кода, которая меняет значение ползунка (извините, я забыл сделать это раньше)
$('.plus').click(function(event){
var sliderCurrentValue = $( this ).next().slider( "value" );
$(this).next().slider( "value", sliderCurrentValue + 1 );
});
Как видите, значение изменяется программно в первый раз, поэтому проверка evt.originalEvent в любом случае бесполезна.
РЕДАКТИРОВАТЬ 2 - я нашел выход из этого, но я надеюсь, что есть лучший способ:
alert("you can't do this");
//destroy the slider
$(this).slider("destroy");
// recreate the slider
_makeSelector(this);
Я думаю, что это также могло бы работать, если бы я просто удалил функцию, связанную с событием «изменить», и сбросил значение, но я надеюсь, что есть лучший способ сделать это!