到目前为止,我的大部分开发工作都在使用 jQuery,并且在使用 vanilla Javascript 更新 NoUiSlider 时遇到了障碍。
基本上我用以下代码创建了多个滑块:
function createSlider ( slide ) {
noUiSlider.create(sliders[slide], {
start: 0,
connect: "lower",
orientation: "horizontal",
step: 1,
range: {
'min': 0,
'max': 240
}
});
}
var sliders = $('.slider');
for ( var i = 0; i < sliders.length; i++ ) {
createSlider(i);
}
这一切都很好,花花公子,我意识到我应该通过使用来听它改变的事件update
,但我对设置相应值的DRYinput
方法非常不熟悉......假设我有以下HTML:
<div class="slider"></div>
<input type="text" value="0" />
<div class="slider"></div>
<input type="text" value="0" />
<div class="slider"></div>
<input type="text" value="0" />
input
在修改滑块之后,我将如何添加一个事件侦听器来更新下一个?
我假设我会按照以下方式做一些事情:
(howToTargetEachInput).addEventListener('change', function(){
(howToTargetEquivilantSlider).noUiSlider.set(this.value);
});
但我不知道如何在不使用一堆 ID 之类的情况下使用重复侦听器。任何帮助表示赞赏。
在这里玩:http: //jsfiddle.net/z83oz9np/9/
更新/解决方案
我编写了一个在创建滑块期间调用的绑定函数,如下所示:
function bindValues(slider, input){
slider.noUiSlider.on('update', function( values, handle ) {
input.value = values[handle];
});
input.addEventListener('change', function(){
slider.noUiSlider.set(this.value);
});
}
var sliders = $('.slider');
var inputs = $('input');
for ( var i = 0; i < sliders.length; i++ ) {
noUiSlider.create(sliders[i], {
start: 0,
connect: "lower",
orientation: "horizontal",
step: 1,
range: {
'min': 0,
'max': 240
}
});
bindValues(sliders[i], inputs[i]);
}