【问题标题】:How to change the value of jquery slider in the "slidechange" event withouth triggering another "slidechange" event如何在“slidechange”事件中更改 jquery 滑块的值而不触发另一个“slidechange”事件
【发布时间】:2011-06-14 08:18:19
【问题描述】:

我已经陷入这个循环有一段时间了。基本上我有一个滑块,当滑块值发生变化时,它会执行一些操作。我要做的第一件事是检查,如果检查没有通过,我需要重置滑块的值。但是重置滑块的值会改变它!所以我被卡住了。这是我的代码:

滑块:

    $(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);

我认为如果我只是删除绑定到“更改”事件的函数并重置值,它也可以工作,但我希望有更好的方法来做到这一点!

【问题讨论】:

    标签: jquery jquery-ui slider jquery-ui-slider


    【解决方案1】:

    检查evt.originalEvent是否存在。

    如果存在,则说明更改是由用户使用自己的控件发起的。如果不是,则表明程序启动了更改。

    编辑 - 可能最简单的解决方案是在重置滑块之前暂时.unbind() change 处理程序,然后立即再次.bind

    【讨论】:

    • 我编辑了答案,抱歉,我忘了说我正在以编程方式更改滑块的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多