jQuery UI несколько ползунков с количеством
У меня есть настройка некоторых ползунков на 1 странице, но когда вы двигаете 1 ползунок, количество всех ползунков меняется...
Как я могу сделать слайдер отдельно друг от друга? И если это не mutch работа, как я могу использовать span вместо inputfield для отображения суммы?
JS:
$(".slider").each(function () {
$(".slider-range").slider({
range: true,
min: 0,
max: 100,
values: [30, 60],
slide: function (event, ui) {
$(".amount").val("$" + ui.values[0] + " - $" + ui.values[1]);
}
});
$(".amount").val("$" + $(".slider-range").slider("values", 0) +
" - $" + $(".slider-range").slider("values", 1));
});
HTML:
<div class="slider">
<b>Price range:</b>
<input type="text" class="amount" />
<div class="slider-range"></div>
</div>
2 ответа:
Не проверял его, но я почти уверен, что это вопрос не использования какого-либо определения области поиска ".ползунок-диапазон" и".количество " элементов. То, как вы это делаете, вы в основном прикрепляете обработчик для события" слайд "для каждого".сумма " элемент X раз (где X-число ".слайдер " элементы на странице).
Мое исправление:
$(".slider").each(function () { // $this is a reference to .slider in current iteration of each var $this = $(this); // find any .slider-range element WITHIN scope of $this $(".slider-range", $this).slider({ range: true, min: 0, max: 100, values: [30, 60], slide: function (event, ui) { // find any element with class .amount WITHIN scope of $this $(".amount", $this).val("$" + ui.values[0] + " - $" + ui.values[1]); } }); $(".amount").val("$" + $(".slider-range").slider("values", 0) + " - $" + $(".slider-range").slider("values", 1)); });
EDIT : я забыл поставить var перед объявлением переменной $this. Я проверил его, и теперь он выглядит нормально :)
Вы используете
.amount
в качестве класса каждый раз для вашего элемента<input />
. Поскольку классы обычно не уникальны, он берет все элементы<input />
с этим классом и изменяет его значение. Поэтому вы должны указать, что он должен искать span с классом amount внутри вашего текущего контейнера (используйте метод.find()
. (Или вы можете использовать уникальный идентификатор для каждого слайдера.)Поэтому, если вы хотите использовать один и тот же HTML снова и снова, вы можете просто сделать:
$(document).ready(function() { $(".slider").each(function() { // $this is a reference to .slider in current iteration of each $this = $(this); // find any .slider-range element WITHIN scope of $this $(".slider-range", $this).slider({ range: true, min: 0, max: 100, values: [ 30, 60 ], slide: function( event, ui ) { // find any element with class .amount WITHIN scope of $this $(this).parent().find(".amount").html( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ]); } }); $(".amount").html( "$" + $(".slider-range").slider("values", 0 ) + " - $" + $(".slider-range").slider("values", 1 )); }); });
Ты следует таким образом также изменить свой HTML и добавить span:
Обратите внимание, что я изменил<div class="slider"> <b>Price range:</b> <span class="amount">0</span> <div class="slider-range"></div> </div> <div class="slider"> <b>Amount range:</b> <span class="amount">0</span> <div class="slider-range"></div> </div>
val()
наhtml()
в вашем скрипте JQuery, чтобы заполнить содержимое span. Подробнее о функцияхhtml()
можно прочитать здесь.Полный рабочий пример этого кода можно найтиздесь на JSFiddle . Это должно решить вашу проблему!