Вход

Просмотр полной версии : ползунок type="range и добавление значение в


wildil
05.07.2015, 14:06
Доброго времени суток! столкнулся с проблемой, имеются к примеру продукция с категориями, по ней идет фильтрация по категориям без перезагрузки страницы! хочу добавить ползунок для фильтрации по году... скрипт фильтрации выполняется
<li class="filter-item" data-filter=".2015">2015</li>

проблема в следующем, не могу поменять значение data-filter=".2015"
если в строчке скрипта document.querySelector("#volume").value = vol;
делаю замену value на data-filter, ничего не меняется!



<input type=range min=2005 max=2015 value=2015 id=fader step=1 onchange="outputUpdate(value)">
<li id=volume class="filter-item" data-filter=".2015">2015</li>
<script> function outputUpdate(vol) {
document.querySelector("#volume").value = vol;
}
</script>';


Увы с программированием не заладилось, надеюсь на вашу помощь! Заранее спасибо!

рони
05.07.2015, 14:19
wildil,
document.querySelector(".filter-item").dataset.filter= "."+vol;
document.querySelector(".filter-item").innerHTML = vol;
https://learn.javascript.ru/attributes-and-custom-properties#свойство-dataset-data-атрибуты

wildil
05.07.2015, 14:28
Благодарю! Знания сила!:)

wildil
05.07.2015, 18:50
возникает вопрос о возможности фильтра выбора с 2ух сторон, мол с 2006 по 2010 год...
я так понял нужно использовать jquery Ui slider.
Правда в голове не укладывается, как сделать расчет
<li id=volume class="filter-item" data-filter="">2006-2010</li>
чтобы в data-filter="" поместить .2006, .2006, .2008, .2009, .2010

Если сможете помочь соображениями на этот счет, буду благодарен!

рони
05.07.2015, 18:57
wildil,
выбор за вами можно один jquery Ui slider, можно два type=range;

рони
05.07.2015, 19:21
wildil,
<!DOCTYPE HTML>

<html>

<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>

<body>
<p>.2015</p>
<input type=range min=2005 max=2015 value=2015 id=fader step=1 onchange="outputUpdate()">
<input type=range min=2005 max=2015 value=2015 id=fader step=1 onchange="outputUpdate()">
<li id=volume class="filter-item" data-filter=".2015">2015</li>
<script>
var p = document.querySelector("p")

function outputUpdate(vol) {
var str = [],
inp = document.querySelectorAll("[type='range']");
min = inp[0].value, max = inp[1].value;
if (min > max) {
inp[1].value = min;
max = min
};
for (var i = min; i <= max; i++) {
str.push(i)
}
p.innerHTML = "." + str.join(",.");
document.querySelector(".filter-item").dataset.filter = "." + str.join(",.");
document.querySelector(".filter-item").innerHTML = min + ((min == max) ? "" : (" - " + max));

}
</script>



</body>

</html>

Deff
05.07.2015, 19:37
Всё таки с ... по удобнее двумя выпадающим меню (select)
Посколь скриптом мон генерить(обрезать) все года младше или равного году 'с'

wildil
05.07.2015, 19:44
хочется все же фильтр, интуитивно и современно)
http://jqueryui.com/slider/#range
разбираюсь сейчас этим вариантом!
рони респектую! правда вариант с 2умя палзунками не удобен получается... если поможете с jquery ui с меня шоколадка!)

рони
05.07.2015, 19:48
wildil,
по вашей ссылке готовый код -- как получить дата -- возьмите из моего кода.

рони
05.07.2015, 20:08
wildil,
<!doctype html>

<html lang="en">

<head>

<meta charset="utf-8">

<title>jQuery UI Slider - Range slider</title>

<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<style type="text/css">
#slider-range{
margin:20px;
width:500px;
height:5px;
}

.ui-slider-handle{
border-radius:50%;
position:relative;
font-size:14px;
display:block;
}

.ui-slider-horizontal .ui-slider-handle{
top:0.5em;
background:transparent;
border-radius:0%;
width:0;
height:0;
border-top:none;
text-decoration:none;
border-left:7px solid transparent;
border-right:7px solid transparent;
border-bottom:14px solid red;
}

.ui-slider-handle:focus{
outline:0;

}

.ui-slider-horizontal .ui-slider-handle:last-of-type{
background:transparent;
border-bottom:none;
border-top:14px solid red;
top:-1.2em;
}

</style>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script>
$(function() {
$("#slider-range").slider({
range: true,
min: 2005,
max: 2015,
values: [2005, 2015],
slide: function(event, ui) {
var min = ui.values[0],
max = ui.values[1],
str = [];
for (var i = min; i <= max; i++) str.push(i);
str = "." + str.join(",.");
$("#volume").html(min + (min == max ? "" : " - " + max)).data({
"filter": str
});
$("p").html(str) //для контроля
}
});
$("#volume").html($("#slider-range").slider("values", 0) + " - " + $("#slider-range").slider("values", 1))
});

</script>

</head>

<body>
<p>.2015</p>
<li id=volume class="filter-item" data-filter=".2015">2015</li>
<div id="slider-range"></div>
</body>

</html>

wildil
05.07.2015, 20:46
Огромное спасибо! последний вопрос, data-filter= остается неизменным, вроде тут вывод идет, я не силен как и говорил выше(
$("#volume").html(min + (min == max ? "" : " - " + max)).data({
"filter": str
});
готов символично поблагодарить на вебмани или телефон)

рони
05.07.2015, 21:14
wildil,
сделайте так, если из data jquery пока не научились извлекать данные.
$("#volume").html(min + (min == max ? "" : " - " + max)).attr({
"data-filter": str
});