如何仅在移动时控制每个滑块值?
How to console each slider value only when they are moved?
我有 3 个滑块范围:
<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
,控制台输出当前value
的当前value
,输出是:
{days: "12", months: "July", years: "1396"}
很好,但是如果我移动第二个滑块因为我想做一个范围,第二个值没有显示,而它应该是:
{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);
}
另一个问题
月份滑块允许的值过多(0 到 12 之间有 13 个值,包括 0 和 12),因此您需要对月份滑块属性进行以下更改:
data-slider-max="11"
在代码中:
$('#months').slider({
formatter: function(value) {
return months[value[0]] + " : " + months[value[1]]; // not -1
}
});
我有 3 个滑块范围:
<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
,控制台输出当前value
的当前value
,输出是:
{days: "12", months: "July", years: "1396"}
很好,但是如果我移动第二个滑块因为我想做一个范围,第二个值没有显示,而它应该是:
{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);
}
另一个问题
月份滑块允许的值过多(0 到 12 之间有 13 个值,包括 0 和 12),因此您需要对月份滑块属性进行以下更改:
data-slider-max="11"
在代码中:
$('#months').slider({
formatter: function(value) {
return months[value[0]] + " : " + months[value[1]]; // not -1
}
});