微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在“ slidechange”事件中更改jquery滑块的值,而又不触发另一个“ slidechange”事件

如何解决如何在“ slidechange”事件中更改jquery滑块的值,而又不触发另一个“ slidechange”事件

我已经在此循环中停留了一段时间。基本上我有一个滑块,当滑块值更改时,它会执行一些操作。我要做的第一件事是进行检查,如果未通过该检查,则需要重置滑块的值。但是重置滑块的值会改变它!所以我被卡住了。这是我的代码: 滑杆:
    $(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);
    }
}
问题是ѭ1触发另一个更改事件! 有人知道如何解决这个问题吗? 我需要使用更改功能,因为我通过单击按钮而不是通过滑动来更改滑块的值。 编辑-evt.originalEvent对我而言始终是未定义的(如果我像console.log(evt.originalEvent)那样对其进行cosole.log记录),但是出于某些奇怪的原因,如果我将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 \”事件的函数并重置值,那也可以工作,但是我希望有更好的方法!     

解决方法

        检查是否存在
evt.originalEvent
。 如果存在,则更改是由用户使用其自己的控件启动的。如果不是,则表示程序已启动更改。 编辑-可能最简单的解决方案是在重置滑块之前临时将
.unbind()
change
处理程序,然后在之后立即再次
.bind
。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。