2016-06-09 4 views
0

Мне нужно обновить диапазон и числовое форматирование слайдера (формат) в зависимости от ввода пользователем. Поскольку формат не относится к числу параметров, которые я могу обновить с помощью метода updateOptions, мне нужно уничтожить слайдер и создать новый. Но события, которые я подключил к исходному слайдеру, перестали работать, хотя документы говорят, что «события не развязаны при уничтожении слайдера» 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 
    }); 
    } 
} 

ответ

0

Предполагая 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)); 
}); 

Это будет путь более производительным, чем восстановление слайдер, тоже.

Example.

+0

Lg102, спасибо. Но похоже, что я слишком глуп, чтобы получить это. Насколько я понимаю, вы перезаписываете оригинальный метод get и что он начинает делать? Как он начинает работать? – Tyoma

+0

Пробовал. Я создал слайдер и оставил опцию 'format' пустым. Затем я вставил ваш код и попытался обновить слайдер с помощью метода 'updateOptions()', чтобы изменить диапазон. Обновление работает, но ползунок теперь игнорирует формат https://jsfiddle.net/artdeev/5vshz44r/. Я не знаю, что с ним делать. Есть идеи? – Tyoma

+0

Я обновил ваш пример в соответствии с описанием, которое вы дали. – Lg102

Смежные вопросы