2016-09-30 4 views
1

Я использую rangeslider.js, чтобы скрыть или показать изображения в зависимости от того, находится ли значение в ведре (на данный момент, выше или ниже 1500), и я получаю странное ответ.rangelider.js - не потянув правильное значение в jquery

Мой слайдер настроен так:

<input id="sliderone" 
    type="range" 
    min="0"  // default 0 
    max="3000" // default 100 
    step="1"  // default 1 
    value="300" // default min + (max-min)/2 
> 

Мой браузер как этот

var sliders = document.querySelectorAll('input[type=range]'); 
var result = document.getElementById('js-result'); 
var values = getValues(sliders); 

$(sliders).rangeslider({ 
    polyfill: false 
}).on('change', function() { 
    var values = getValues(sliders); 
    updateResult(result, values); 
    console.log(values); 
}); 

$(sliders).rangeslider({ 
    polyfill: false 
}).on('change', function() { 
    var values = getValues(sliders); 
    updateResult(result, values); 
    console.log(values); 
}); 

updateResult(result, values); 

function newchangepic1() { 
    var newvalue = values[0]; 
    console.log(newvalue); 

    if (newvalue < 1500) { 
      $(".img-one").attr("src","images/travel.png"); 
    } else if (newvalue > 1500) { 
      $(".img-one").attr("src","images/plant-color.png"); 
    } 
} 

function newchangepic3() { 
    var newvalue = values[1]; 
    console.log(newvalue); 

    if (newvalue < 1500) { 
     $(".img-two").attr("src","images/hdb.png"); 
    } else if (newvalue > 1500) { 
     $(".img-two").attr("src","images/plane.png"); 
    } 
} 

Когда я делаю

console.log(values); 

Он печатает мой массив, как ожидается, обновление с каждое движение.

var newvalue = values[0]; 
console.log(newvalue); 

Но когда я пытаюсь прочитать одно из значений внутри массива я получаю 300. начальное значение я устанавливаю в HTML.

Array results - 300 Я не могу понять, почему это происходит, но я плохо кодирую, поэтому, вероятно, что-то не хватает.

Любая помощь?

+0

попробуйте использовать parseInt (значение) – softwarenewbie7331

+0

@ softwarenewbie7331 где? –

+0

, где вам нужно использовать значение, полученное с ползунка. например parseInt (значения [0]) – softwarenewbie7331

ответ

2
var values = getValues(sliders); 

$(sliders).rangeslider({ 
    polyfill: false 
}).on('change', function() { 
    values = getValues(sliders); //<--------- 
    updateResult(result, values); 
    console.log(values); 
}); 

$(sliders).rangeslider({ 
    polyfill: false 
}).on('change', function() { 
    values = getValues(sliders);//<--------- 
    updateResult(result, values); 
    console.log(values); 
}); 

Возможно, вы не должны объявлять локальные значения переменных, если вы собираетесь использовать глобальный массив для хранения последних значений.

+0

Спасибо, куча, использовала пример и пыталась изменить. Не думал об этом. :) –

+0

Да, такая ошибка происходит, и если вы уделяете пристальное внимание, вы используете тот же код дважды, который в основном делает то же самое. Приятно знать, что вы решили. – Samundra

2

Я рассмотрел rangeslider.js. Из его API похоже, что правильным способом является использование обработчика изменений onSlide, и вы должны обновить любую глобальную локальную переменную этим методом. См. JsFiddle Sample, где я обновил глобальную переменную slideValue на основе события изменения слайдов.

Парциальный код свыше jsfiddle:

$(document).ready(function() { 
    var sliders = document.querySelectorAll('input[type=range]'); 
    var result = document.getElementById('js-result'); 

    var slideValue; // This global value gets updated with each slide event 

    $(sliders).rangeslider({ 
     polyfill: false, 

     // Handle the slide change event and update value accordingly 
     onSlide: function(pos, value) { 
      slideValue = value; 
      console.log('Value updated to ', value); 
     } 
    }); 
}); 

Дайте нам знать, если это работает для вас или нет.

+0

Спасибо, уже исправил его выше, но это помогло мне сделать еще один аспект гораздо более эффективным :) –

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