当我销毁滑块时事件不受约束
Events get unbound when I destroy slider
我需要根据用户输入更新滑块的范围和数字格式(格式选项)。
由于格式不在我可以使用 updateOptions 方法更新的选项中,我必须销毁滑块并创建一个新滑块。但是我勾住原始滑块停止工作的事件尽管文档说 'events are not unbound when destroying a slider' https://refreshless.com/nouislider/more/
我的代码有什么问题?有没有办法将事件绑定回来?
var slider = document.getElementById('slider');
noUiSlider.create(slider, {
start: [ 1000000 ],
step: 1000,
connect: 'lower',
range: {
'min': [ 500000 ],
'max': [ 5000000 ]
},
format: rubleFormat
});
//code's getting redundant, I repeat it. Will fix later
function updateSlider(currency) {
if(currency == 'USD') {
slider.noUiSlider.destroy();
noUiSlider.create(slider, {
start: [ 10000 ],
step: 100,
connect: 'lower',
range: {
'min': [ 5000 ],
'max': [ 300000 ]
},
format: dollarFormat
});
}
else {
slider.noUiSlider.destroy();
noUiSlider.create(slider, {
start: [ 1000000 ],
step: 1000,
connect: 'lower',
range: {
'min': [ 500000 ],
'max': [ 5000000 ]
},
format: rubleFormat
});
}
}
假设 rubleFormat
和 dollarFormat
是 wNumb
的实例,您可以关闭格式化程序。设置 format
转换为 Number
:
var currentFormatter = rubleFormat;
function updateSlider(currency) {
currentFormatter = currency === 'USD' ? dollarFormat : rubleFormat;
slider.noUiSlider.updateOptions({ /* ... */ });
}
slider.noUiSlider.on('update', function(values, handle){
input.value = currentFormatter.to(values[handle]);
});
input.addEventListener('change', function(){
slider.noUiSlider.set(currentFormatter.from(this.value));
});
这也比重建滑块 更高效。
我需要根据用户输入更新滑块的范围和数字格式(格式选项)。 由于格式不在我可以使用 updateOptions 方法更新的选项中,我必须销毁滑块并创建一个新滑块。但是我勾住原始滑块停止工作的事件尽管文档说 'events are not unbound when destroying a slider' https://refreshless.com/nouislider/more/ 我的代码有什么问题?有没有办法将事件绑定回来?
var slider = document.getElementById('slider');
noUiSlider.create(slider, {
start: [ 1000000 ],
step: 1000,
connect: 'lower',
range: {
'min': [ 500000 ],
'max': [ 5000000 ]
},
format: rubleFormat
});
//code's getting redundant, I repeat it. Will fix later
function updateSlider(currency) {
if(currency == 'USD') {
slider.noUiSlider.destroy();
noUiSlider.create(slider, {
start: [ 10000 ],
step: 100,
connect: 'lower',
range: {
'min': [ 5000 ],
'max': [ 300000 ]
},
format: dollarFormat
});
}
else {
slider.noUiSlider.destroy();
noUiSlider.create(slider, {
start: [ 1000000 ],
step: 1000,
connect: 'lower',
range: {
'min': [ 500000 ],
'max': [ 5000000 ]
},
format: rubleFormat
});
}
}
假设 rubleFormat
和 dollarFormat
是 wNumb
的实例,您可以关闭格式化程序。设置 format
转换为 Number
:
var currentFormatter = rubleFormat;
function updateSlider(currency) {
currentFormatter = currency === 'USD' ? dollarFormat : rubleFormat;
slider.noUiSlider.updateOptions({ /* ... */ });
}
slider.noUiSlider.on('update', function(values, handle){
input.value = currentFormatter.to(values[handle]);
});
input.addEventListener('change', function(){
slider.noUiSlider.set(currentFormatter.from(this.value));
});
这也比重建滑块 更高效。