Как изменить значение ползунка jquery в событии «slidechange», не вызывая другое событие «slidechange» - PullRequest
1 голос
/ 14 июня 2011

Я застрял в этом цикле на некоторое время. В основном у меня есть ползунок, который выполняет некоторые действия при изменении значений ползунка. Первое, что я делаю, это делаю проверку, и если эта проверка не проходит, мне нужно сбросить значение ползунка. Но сброс значения ползунка меняет его! И вот я застрял. Вот мой код:

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", и сбросил значение, но я надеюсь, что есть лучший способ сделать это!

1 Ответ

1 голос
/ 14 июня 2011

Проверка на наличие evt.originalEvent.

Если оно есть, изменение было инициировано пользователем с использованием его собственных элементов управления. Если это не так, это указывает на изменение, инициированное программой.

РЕДАКТИРОВАТЬ - вероятно, самое простое решение - временно .unbind() обработчик change перед сбросом ползунка, а затем .bind сразу же после этого.

...