【问题标题】:noUiSlider custom formatting time with libLinknoUiSlider 使用 libLink 自定义格式化时间
【发布时间】:2015-03-17 13:45:41
【问题描述】:

noUiSlider 中的自定义格式加上时间值的 libLink 对我来说不起作用。

我想使用滑块以 24 小时格式输出时间(例如 17:32)。

我还想输入一个有效时间并通过 libLink 更新滑块。

当我移动滑块时,输入中的时间会正确更新。但反过来就不行:在输入中输入一个新时间,然后取消聚焦会将输入重置为之前的值。

如果您取消注释函数 HHMMtoMinutes() 中的 console.log,您可以看到它触发了两次。这里发生了什么?

$(document).ready(function() {

  $(".slider").noUiSlider({
    start: ["07:30"],
    range: {
      'min': 0,
      'max': 24 * 60
    },
    format: {
      to: minutesToHHMM,
      from: HHMMtoMinutes
    }
  });

  $(".slider").Link("lower").to($("#time"));

});

function minutesToHHMM(value) {
  value = Math.round(value);
  var hour = Math.floor(value / 60);
  var min = value - hour * 60;
  //console.log("value:" + value + "\thour: " + hour + "\tmin: " + min)
  return ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2);
}

function HHMMtoMinutes(value) {
  var split = value.toString().split(":");
  var hour = parseInt(split[0]) * 60;
  var min = parseInt(split[1]);
  //console.log("value: " + value + "\thour: " + hour + "\tmin " + min);
  return hour + min;
}
<link href="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://refreshless.com/nouislider/source/distribute/jquery.nouislider.all.js"></script>

<div style="width:80%; margin:80px 0 0 100px">
  <div class="slider"></div>
  <form style="margin-top:20px">
    <label for="time">time</label>
    <input type="text" id="time" name="time" />
  </form>
</div>

这里也是一个 JSFiddle:https://jsfiddle.net/g42e6saf/2/

【问题讨论】:

    标签: javascript jquery time nouislider


    【解决方案1】:

    它运行了两次,因为libLinkneeds to use滑块.val()方法更新。在链接上设置格式可以解决您的问题。

    $(".slider").noUiSlider({
        start: [ 0 ],
        range: {
            'min': 0,
            'max': 24 * 60
        }      
    });
    
    $(".slider").Link("lower").to($("#time"), null, {
        to: minutesToHHMM,
        from: HHMMtoMinutes
    });
    

    Updated fiddle.

    【讨论】:

    • 谢谢,解决了。感谢您提供这个非常棒的滑块 - 这是您能找到的最好的滑块!
    【解决方案2】:

    我查看了文档,它似乎有同样的问题,所以也许这是一个错误? (我又看了一遍,它现在可以工作了)无论如何,这是一个不使用 libLink 脚本的解决方法https://jsfiddle.net/q4s4xrL7/2/

    $(document).ready(function () {
        var $time = $('#time'),
            $slider = $('.slider');
    
        $slider.noUiSlider({
            start: ["07:30"],
            range: {
                'min': 0,
                    'max': 24 * 60 - 1 // and I've subtracted 1 to make the range stop at 23:29
            },
            format: {
                to: minutesToHHMM,
                from: HHMMtoMinutes
            }
        }).on({
            slide: updateInputValue
        });
    
        function minutesToHHMM(value) {
            value = Math.round(value);
            var hour = Math.floor(value / 60);
            var min = value - hour * 60;
            //console.log("value:" + value + "\thour: " + hour + "\tmin: " + min)
            return ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2);
        }
    
        function HHMMtoMinutes(value) {
            var split = value.toString().split(":");
            var hour = parseInt(split[0], 10) * 60;
            var min = parseInt(split[1], 10);
            //console.log("value: " + value + "\thour: " + hour + "\tmin " + min);
            return hour + min;
        }
    
        $time.change(function () {
            $slider.val($time.val());
        });
    
        function updateInputValue() {
            $time.val($slider.val());
        }
    
        // run when page first loads
        updateInputValue();
    });
    

    【讨论】:

    • 我必须接受滑块作者 Lg102 的答案,因为它是正确的。但感谢您抽出宝贵时间帮助我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多