Я застрял в этом цикле на некоторое время. В основном у меня есть ползунок, который выполняет некоторые действия при изменении значений ползунка. Первое, что я делаю, это делаю проверку, и если эта проверка не проходит, мне нужно сбросить значение ползунка. Но сброс значения ползунка меняет его! И вот я застрял. Вот мой код:
Slider:
$(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);
Я думаю, что это также могло бы работать, если бы я просто удалил функцию, связанную с событием "change", и сбросил значение, но я надеюсь, что есть лучший способ сделать это!