【问题标题】:NoUISlider Tooltip only show integersNoUISlider Tooltip 仅显示整数
【发布时间】:2015-07-25 22:40:13
【问题描述】:

我希望滑块上的工具提示只显示“130”之类的整数,而不是“130.00”。 我只是不知道我可以从哪里开始。

这是我的代码:

$( document ).ready(function() {
var groesseslider = document.getElementById('slider-tooltip');

noUiSlider.create(groesseslider, {
    start: [ 145 ],
    step: 1,
    range: {
        'min': 100,
        'max': 250
    }
});
    });
$( document ).ready(function() {
    var groesseslider = document.getElementById('slider-tooltip');
var tipHandles = groesseslider.getElementsByClassName('noUi-handle'),
    tooltips = [];

// Add divs to the slider handles.
for ( var i = 0; i < tipHandles.length; i++ ){
    tooltips[i] = document.createElement('div');
    tipHandles[i].appendChild(tooltips[i]);
}

// When the slider changes, write the value to the tooltips.
groesseslider.noUiSlider.on('update', function( values, handle ){
    tooltips[handle].innerHTML = values[handle];
});
    });

我的 JS 代码: http://jsfiddle.net/miiauwz/66a5ahm0/

【问题讨论】:

    标签: javascript integer tooltip nouislider


    【解决方案1】:

    这可以工作..

    var sliderFormat = document.getElementById('slider-format');
    
    noUiSlider.create(sliderFormat, {
    start: [ 20 ],
    ...
    format: {
        from: function(value) {
                return parseInt(value);
            },
        to: function(value) {
                return parseInt(value);
            }
        }
    });
    

    【讨论】:

    • 谢谢!很高兴有一个不需要额外依赖的解决方案,因为库应该是“最小的”
    • 迄今为止最好的解决方案
    • 很好的解决方案,无需添加 wNum 或修改库即可删除小数。这应该是公认的答案。
    • 像魅力一样工作!这当然是解决问题的方法。
    【解决方案2】:

    您可以尝试使用unencoded 值,如 noUISlider 关于events and their binding 的文档中所述

    slider.noUiSlider.on("update", function(values, handle, unencoded ) {
        // values: Current slider values;
        // handle: Handle that caused the event;
        // unencoded: Slider values without formatting;
    });
    

    或者另一种可能性是使用format option on slider creation(但我自己还没有尝试过):

    noUiSlider.create(slider, {
        start: [ 20000 ],
        ...
        format: wNumb({
            decimals: 0, // default is 2
            thousand: '.', // thousand delimiter
            postfix: ' (US $)', // gets appended after the number
        })
    });
    

    缺点是你必须从这里单独下载 wNumb-Library:http://refreshless.com/wnumb/


    没有 wNumb 的另一种方式

    在再次查看来自 noUISlider 的示例后,我发现 this way 用于手动格式化(在页面底部):

    var sliderFormat = document.getElementById('slider-format');
    
    noUiSlider.create(sliderFormat, {
        start: [ 20 ],
        ...
    
        format: {
          to: function ( value ) {
            return value + ',-';
          },
          from: function ( value ) {
            return value.replace(',-', '');
          }
        }
    });
    

    【讨论】:

    • 谢谢,但它不起作用,我收到此错误:未捕获的 ReferenceError:未定义 wNumb 并且未编码的方法不会改变任何东西:/
    • @Juloius 您是否尝试像这样访问未编码的值:unencoded[handle]
    • 我不知道你所说的“访问”值是什么意思,我对 Javascript 很陌生,抱歉
    • 谢谢!我下载了 wnumb 库,它可以工作了 :)
    • @Juloius 如果您对除了使用 wNumb 之外的其他两种方法感兴趣,这里是一个使用未编码值的 jsfiddle:http://jsfiddle.net/499Lg1bz/8/ 和一个使用手册 from- 和 to-方法:http://jsfiddle.net/499Lg1bz/11/
    【解决方案3】:

    如果您认为自己的网站不需要小数位,可以在 jquery.nouislider.min.js 文件中搜索 toFixed(2) 并替换为 toFixed(0)

    【讨论】:

      【解决方案4】:

      我不想使用 wNumb - library ,这种方法可能有效。 这将为您提供不带小数的值。 希望这会有所帮助。

      value.split('.')[0]
      

      【讨论】:

      • 这里不考虑四舍五入
      【解决方案5】:

      我想我会提供一个答案,以防其他人来找这个。只需将以下内容作为选项添加到 noUiSlider 创建:

      tooltips: [ wNumb({ decimals: 0 }), wNumb({ decimals: 0 }) ],
      

      以下代码将使用 noUiSlider 工具提示创建您需要的滑块,仅显示不带小数点的整数值:

      $( document ).ready(function() {
      var groesseslider = document.getElementById('slider-tooltip');
      
      noUiSlider.create(groesseslider, {
          start: [ 145 ],
          step: 1,
          tooltips: [ wNumb({ decimals: 0 }), wNumb({ decimals: 0 }) ],
          range: {
              'min': 100,
              'max': 250
          }
      });
      

      【讨论】:

        【解决方案6】:

        只需使用 Math 而不是库。

        Math.round(value)
        

        【讨论】:

        • 值未定义。
        【解决方案7】:
        
        
        
        
        var skipSlider = document.getElementById('price');
        
        noUiSlider.create(skipSlider, {
            start: [47000, 247000],
            connect: true,
            behaviour: 'drag',
            step: 1,
            range: {
              'min': [47000],
              'max': [247000]
            },
        });
        
        var skipValues = [
            document.getElementById('min-price'),
            document.getElementById('max-price')
        ];
        
        skipSlider.noUiSlider.on('update', function (values, handle, unencoded) {
            skipValues[handle].innerHTML = unencoded[handle];
        });
        
        
        
        
        

        【讨论】:

        • 请解释你的答案。
        • 普通的东西就是一个台阶和一个把手
        【解决方案8】:

        不使用任何其他库的可能方式。如果我们只想显示整数,则无需使用其他库。假设在 html 代码中有元素'slider-fee'。

        <div id="slider-fee"></div>
        

        假设我们想要选择一天中的时间范围。像 7h-19h 或 8h-20h 之类的东西,在工具提示中我们只想显示整数。

        dragTapSlider = document.getElementById('slider-fee');
        
        // number of decimal places 
        decimals = 0;
        
        // format object
        numberFormat = {
            // 'to' the formatted value. Receives a number.
            to: function (value) {
                return value.toFixed(decimals);
            },
            // 'from' the formatted value.
            // Receives a string, should return a number.
            from: function (value) {
                return Number(value);;
            }
        };
        
        noUiSlider.create(dragTapSlider, {
            start: [8, 20],
            connect: [false, true, false], 
            step: 1,
            behaviour: 'drag',
            tooltips: [true, true],
            range: {
                'min': 1,
                'max': 24
            },
            format: numberFormat
        });
        

        noUiSlider - Integer Format

        货币范围示例

        dragTapSlider = document.getElementById('slider-fee');
        
        decimals = 2;
        suffix = '€';
        
        numberFormat = {
            // 'to' Format the value to currency.
            to: function (value) {
                return value.toFixed(decimals) + ' ' + suffix;
            },
            // 'from' Convert currency value to number.
            // Receives a string, should return a number.
            from: function (value) {
                return Number(value.replace(' ' + suffix));
            }
        };
        
        noUiSlider.create(dragTapSlider, {
        
            start: [25, 40],
            connect: [false, true, false],
            step: 0.5,
            behaviour: 'drag',
            tooltips: [true, true],
            range: {
                'min': 20,
                'max': 50
            },
            format: numberFormat
        });
        

        noUiSlider - Currency Format

        【讨论】:

        • 在您的答案中添加一些描述,以便更容易理解并且用户了解代码在做什么
        【解决方案9】:

        没有外部库的反应示例:

        <Nouislider
            range={{ min: 0, max: 5 }}
            tooltips={true}
            step={1}
            start={[0, 5]}
            connect
            format={{
              from: (value) => {
                return parseInt(value);
              },
              to: (value) => {
                return parseInt(value);
              }
            }}
            onSlide={onUpdate}
        />
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-07-22
          • 1970-01-01
          • 2017-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多