【问题标题】:Bootstrap Slider change value handler引导滑块更改值处理程序
【发布时间】:2014-03-19 02:35:42
【问题描述】:

我正在使用 Bootstrap Slider,我想知道是否有任何方法可以包含用于更改值的处理程序。我看到文档包括用于 slideStart、slide 和 slideStop 的处理程序,但没有用于“更改”(价值)的处理程序。

他们可能会滑动滑块并(在释放时)最终达到相同的值,在这种情况下,我不希望触发事件。仅当他们将其滑动到新值时。

我试过了:

$('#sliderAdminType').slider({
    formater: function(value) {
        // my formater stuff that works
        },
    change: function(event, ui) {
        console.log("has changed");
        }       
    });

$('#sliderAdminType').change(function() {
    console.log("has changed");
});

$('#sliderAdminType').slider().change(function() {
    console.log("has changed");
});

$('body').on('change', '#sliderAdminType', function(e){
    console.log("has changed");
});

【问题讨论】:

    标签: jquery twitter-bootstrap slider


    【解决方案1】:

    您可以执行以下步骤:

    1) 使用slideStart 事件获取滑块的原始值

    2) 使用slideStop 事件获取滑块的新值

    3) 比较这两个值,如果不同则触发您的代码

    var originalVal;
    
    $('.span2').slider().on('slideStart', function(ev){
        originalVal = $('.span2').data('slider').getValue();
    });
    
    $('.span2').slider().on('slideStop', function(ev){
        var newVal = $('.span2').data('slider').getValue();
        if(originalVal != newVal) {
            alert('Value Changed!');
        }
    });
    

    Fiddle Demo

    【讨论】:

    • 谢谢。我知道我可以做这样的解决方法,我只是希望有一种方法可以触发通常的更改处理程序,而我只是错过了一些东西。 :) 如果事实证明这是不可能的,我将使用此选项。谢谢!
    • @Lys777 我相信引导滑块中没有change 的事件,因为我已经多次浏览了他们的所有文档:)
    • 小心! 'change'、'slideStart'、'slideStop' 的当前实现在鼠标移动时触发。我问为什么会有一些意想不到的实现,答案是插件的工作方式。
    • 非常感谢您的回答。我正在对更改进行 Ajax 调用,它曾经在滑动滑块时对每个点进行 Ajax 调用。现在,在此之后,当滑块停止时,它只进行一次 ajax 调用。
    • @Felix - 我应该怎么做才能在滑动条上执行可点击事件?
    【解决方案2】:

    只使用幻灯片而不是更改事件。启动器效果不佳,因此您可以在 Slide 中重新设置值。

            var thresholdSlider = $('#Threshold');
            thresholdSlider.slider({
                formater: function (value) {
                    return 'Current value: ' + value;
                }
            });
    
            thresholdSlider.slider().on('slide', function (ev) {
                thresholdSlider.slider('setValue', ev.value);
            });
    

    【讨论】:

      【解决方案3】:

      接受的答案对于 range: true 滑块

      无效

      这里是双滑块检查:https://jsfiddle.net/oayj5Lhb/

      对于双滑块:“更改”事件返回 newValueoldValue 对象。请记住,'change'、'slideStart'、'slideStop' 事件在鼠标移动时触发(当我问为什么答案是“这是正确的实施”,对我来说看起来有点奇怪)。举个例子:

      $('#your-slider').slider().on('change', function(event) {
          var a = event.value.newValue;
          var b = event.value.oldValue;
      
          var changed = !($.inArray(a[0], b) !== -1 && 
                          $.inArray(a[1], b) !== -1 && 
                          $.inArray(b[0], a) !== -1 && 
                          $.inArray(b[1], a) !== -1 && 
                          a.length === b.length);
      
          if(changed ) {
              //your logic should be here
          }
      });
      

      请注意: [2, 1] 和 [1, 2] 被认为是相等的,因为滑块对可以互换。

      【讨论】:

      • 这应该是正确的答案。如果我只是点击 Ticker,'slideStart'、'slideStop' 会触发我的代码。 “更改”仅在值发生更改后才起作用。
      【解决方案4】:

      如果 on 功能不适合像我这样的你,试试这个

      $('#yourSlider').bind("slideStop", function (e)

      【讨论】:

      • 当我不想再次调用 slider() 时,这对我来说非常有效。
      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 2013-03-22
      • 2015-08-09
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      相关资源
      最近更新 更多