javascript - 如何仅在移动时控制每个 slider 值?

标签 javascript jquery bootstrap-slider

我有 3 个 slider 范围:

<div class="container">
  <div class="row" id="time" >
    <div class="col-xs-4">
      Days: <b>1</b> <input id="days" type="text" class="span2" value="" data-slider-min="1" data-slider-max="31" data-slider-step="1" data-slider-value="[0,31]"/> <b>31</b>
    </div>
    <div class="col-xs-4">
      Months: <b>January</b> <input id="months" type="text" data-provide="slider" data-slider-step="1" data-slider-min="0" data-slider-max="12" data-slider-tooltip="show" data-slider-value="[0,12]" /> <b>December</b>
    </div>
    <div class="col-xs-4">
      Years: <b>0</b> <input id="years" type="text" class="span2" value="" data-slider-min="0" data-slider-max="2017" data-slider-step="1" data-slider-value="[0,2017]"/> <b>Today</b>
    </div>
  </div>
</div>

我正在运行以下js:

var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
getData = function() {
    var data = {};
  var temp = $('#days').slider().val().split(',');
  data.days = temp[0];
  temp = $('#months').slider().val().split(',');
  data.months = months[temp[0]];
  temp = $('#years').slider().val().split(',');
  data.years = temp[0];
  console.log(data);
}
$("#days, #years").slider({
  tooltip: 'always',
});  
$('#months').slider({
    formatter: function(value) {
    return months[value[0]] + " : " + months[value[1] - 1];
    }
});
$("input").on("slide", function(slideEvt) {
    getData();
});

基本上,当我们移动 slider 时,控制台会输出当前的当前,输出为:

{days: "12", months: "July", years: "1396"}

这很好,但如果我移动第二个 slider ,因为我想要执行一个范围,则第二个值不会显示,而它应该显示:

{days: "12", days: "24", months: "July", months: "September", years: "1396", years: "1842"}

但是每个值或两者都应该仅在我们实际移动每个 slider 时出现

这是一个 jsFiddle ,检查控制台

注意,我实际上需要这种格式的值,因为它们将被视为某些元素的类:

示例

day22 
february
year1632

最佳答案

对象不能有重复的键,因此您必须使用不同的数据结构。例如,您可以让 data 为两个对象的数组,然后这两个对象中的每一个都将具有日、月和年属性:

getData = function() {
    var data = [];
    for (var i = 0; i < 2; i++) {
        data.push({
            day: $('#days').slider().val().split(',')[i], 
            month: months[$('#months').slider().val().split(',')[i]],
            year: $('#years').slider().val().split(',')[i], 
        }) ;
    }  
    console.log(data);
}

或者,如果您希望将日期放在一起,并且月份和年份也相同,则可以让这三个属性中的每一个都是具有两个值的数组:

getData = function() {
    var data = {
        days: $('#days').slider().val().split(','), 
        months: $('#months').slider().val().split(',').map(i => months[i]),
        years: $('#years').slider().val().split(',')
    }  
    console.log(data);
}

另一个问题

月份 slider 允许的值太多(0 到 12 之间有 13 个值),因此您需要对月份 slider 属性进行此更改:

data-slider-max="11"

并在代码中:

$('#months').slider({
    formatter: function(value) {
        return months[value[0]] + " : " + months[value[1]]; // not -1
    }
});

关于javascript - 如何仅在移动时控制每个 slider 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45525119/

相关文章:

javascript - 如何在 Javascript 中启动 php session ?

jquery - 显示下拉列表时填充下拉列表?

javascript - 引导 slider 加载不起作用

javascript - bootstrap-slider链接输入数字与幻灯片变化

PHP 循环 : Bootstrap Slider Add div with item class every 3 item and the first one will have active

javascript - 同时在两个文本框上显示光标

javascript - 使用对象将属性设置为 img

javascript - 如何使用 val() 与 js 和 jquery 获取输入值

javascript - 突出显示 slider 中的中间 div

JavaScript 刷新文件内容