Фильтр по цене.
Добрый вечер. Пытаюсь сделать фильтрацию блоков по цене. (у каждого блока есть кастомный атрибут "data-price" равный некоторому числу.).
Возникло сразу множество пробел, которые я не смог решить: 1)goods_input_price_min - инпут тайп="намбер", почему то после 2-х нажатий кнопки вверх, вместо 20(шаг="10"), становится 1110(валуе соседнего инпута goods_input_price_max). Потом если отматывать вниз значение минимального инпута, оно не дает делать меньше 1000... и вечно скачет на 1110. 2)не понимаю как убрать элементы которые не входят в ценовой диапазон. Вроде бы сделал некий массив (jQuery.makeArray($(".moiki .tdk_item"));). Но что с ним делать дальше придумать не могу. Да и вообще мне кажется что не верно массив задал. Буду рад любой помощи по существу.
<script language="JavaScript" type="text/javascript">
$("#goods_input_price_min").change(function(){
var min_value = this.value;
var max_value = document.getElementById("goods_input_price_max").value;
if(min_value>max_value){
document.getElementById("goods_input_price_min").value = max_value;
}
var array_elements = jQuery.makeArray($(".moiki .tdk_item"));
});
</script>
Была идея получить размер массива. (кстати не могу найти как это сделать. Проблвал .length - не прокатило.) Дальше по этой длине массива сделать цикл фор, вытягивать из выбранного элемента массива (если это возможно) кастомный атрибут и сравнивать с переменными максимальной и минимальной цены. Если не входит в рендж, то хайд(). Если попал то шоу(). С длиной массива разобрался. Ставил лишние скобки. Работает так: var array_elements_length = array_elements.length; |
feniks7,
а html ? |
хтмл:
1) инпуты. (знаю что стилям в атрибутах дива не место, перенесу по завершению) <div id="goods_filter" style="height:100px;background-color:#cdcdcd;margin-left:10px;margin-bottom:5px;margin-top:2px;"> <div style="font-size:18px;padding:20px;padding-bottom:10px;"><span >Стоимость:<span> от</span><input type="number" value="0" min="0" step="10" id="goods_input_price_min"><span> до</span></span> <input type="number" value="1110" min="1000" step="10" id="goods_input_price_max"></div> А вот с самими дивами гораздо хуже дела обстоят... <div data-price="1 000" valign="top" id="bx_2097971167_14197" align="left" class="moiki Blanco 1 tdk_item" style="min-width:260px;width:260px;padding-left:0;margin-left:0;display:inline-block;padding-right:2%;padding-bottom:1%;height:220px;vertical-align:top;"> <table cellpadding="0" cellspacing="0" border="0" align="center"> <tr> <td valign="top" width="260px"> <a id="m_Auflagespuele_R-ES_8_x_5_Edelstahl" href="#" class="items"> <div class="item" style="background-image:url(/upload/iblock/0b3/0b34e934ead190309842aea2b982fd36.jpg); background-size:100% 100%;height:220px;"> <div class="descr_cont"> <div class="descr" style="bottom:-78px;"> <div class="preview_text" style="bottom:-78px;"> </div> </div> <div class="name" style="margin-left:2190px;"> <h3 style="font-size:0px;">Auflagespuele_R-ES_8_x_5_Edelstahl</h3> </div> <div class="name" style="right:1%;margin-top:78px;"> <h3 style="float:right;"><span style="font-size:0px;">=</span><span style="">1 000</span> P</h3> </div> <div class="name" style="margin-left:2190px;"> <h3 style="font-size:0px;"><span style="font-size:0px;">=</span><span >800х500mm</span></h3> </div> <div class="name" style="margin-left:2190px;"> <h3 style="font-size:0px;"><span style="font-size:0px;">=</span><span >сталь</span></h3> </div> <div class="name" style="margin-left:2190px;"> <h3 style="font-size:0px;"><span style="font-size:0px;">=</span><span >Blanco</span></h3> </div> <div class="name" style="margin-left:2190px;"> <h3 style="font-size:0px;"><span style="font-size:0px;">=</span><span >5 лет</span></h3> </div> <div class="m_Auflagespuele_R-ES_8_x_5_Edelstahl" style="background: url(/upload/iblock/ea4/ea4f96b6a349f15b4cfbca65011a7bb4.jpg);"></div> </div> </div> </a> </td> </tr> </table> </div> Это пример одного блока, их на деле довольно много. |
Ситуация изменилась. Решено заменить инпуты на JQslider.
<p> <label for="amount">Price range:</label> <input type="text" id="amount" style="border: 0; color: #f6931f; font-weight: bold;" /> </p> <div id="slider-range"></div>
<script language="JavaScript" type="text/javascript">
$(function() {
$( "#slider-range" ).slider({
range: true,
min: 0,
max: 2000,
step:50,
values: [ 75, 300 ],
slide: function( event, ui ) {
$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
var min_value = ui.values[0];
var max_value = ui.values[1];
var array_elements = jQuery.makeArray($(".moiki .tdk_item"));
var array_elements_length = array_elements.length;
for(var i=0; i<=array_elements_length; i++){
var tdk_filter_current_id=array_elements[i].id;
var tdk_filter_current_price=+array_elements[i].getAttribute("data-price");
if(tdk_filter_current_price<min_value||tdk_filter_current_price>max_value){
$( '#'+tdk_filter_current_id ).hide();
}
else{
$( '#'+tdk_filter_current_id ).show();
}
}
}
});
$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
" - $" + $( "#slider-range" ).slider( "values", 1 ) );
});
</script>
Теперь такая проблема что как только я добавляю <if else> в эту конструкцию, перестает двигаться ползунок слайдера. Прошу помощи с решением этой проблемы... |
Похоже со всем разобрался. Если вдруг кто-то умудрился заниматься такой же фигней и наткнулся на подобную ошибку. Мое решение:
<script language="JavaScript" type="text/javascript">
$(function() {
$( "#slider-range" ).slider({
range: true,
min: 0,
max: 2000,
step:50,
values: [ 0, 1600 ],
slide: function( event, ui ) {
$( "#amount1" ).text( "$" + ui.values[ 0 ] );
$( "#amount2" ).text( "$" + ui.values[ 1 ] );
},
change: function( event, ui ) {
var min_value = ui.values[0];
var max_value = ui.values[1];
var array_elements = jQuery.makeArray($(".moiki .tdk_item"));
var array_elements_length = array_elements.length;
for(var i=0; i<=array_elements_length; i++){
var tdk_filter_current_id=array_elements[i].id;
var tdk_filter_current_price=+array_elements[i].getAttribute("data-price");
if(tdk_filter_current_price<min_value||tdk_filter_current_price>max_value){
$( '#'+tdk_filter_current_id ).hide();
}
else{
$( '#'+tdk_filter_current_id ).show();
}
}
}
});
$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
" - $" + $( "#slider-range" ).slider( "values", 1 ) );
});
</script>
То есть сделал функцию на другое событие, не на слайд, а на чейндж. |
feniks7,
увы много букв неосилил |
Цитата:
В документации написано: $( ".selector" ).slider( "option", "max", 50 );- чтобы поменять максимальнео значение слайдера в любой момент времени. Однако на деле у меня подобного рода обращения не работают вовсе. Как пример, пытаюсь при нажатии на один элемент чтобы сенялся степ слайдера(изначально инициализирется с шагом 50):
$("#check_moiki").click(function(){
$('#slider_range').slider("option", "step", 1);
var steps = $( "#slider_range" ).slider( "option", "step" );
alert(steps);
return false;
});
тут алерт выводит: [object Object]. Что может быть не так? |
Цитата:
Цитата:
|
Цитата:
|
feniks7,
вот так примерно хотелосьбы видеть ваш код а не кусками
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery UI Slider - Range slider</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<script>
$(function() {
$("#slider_range").slider({
range: true,
min: 0,
max: 2000,
step:50,
values: [ 0, 1600 ],
slide: function( event, ui ) {
$( "#amount1" ).val( "$" + ui.values[ 0 ] );
$( "#amount2" ).val( "$" + ui.values[ 1 ] );
}
})
$("#check_moiki").click(function(){
$('#slider_range').slider("option", "step", 1);
var steps = $( "#slider_range" ).slider( "option", "step" );
alert(steps);
return false;
});
})
</script>
</head>
<body>
<p> <label for="amount">Price range:</label>
<input type="text" id="amount1" style="border: 0; color: #f6931f; font-weight: bold;" value = "$0" />
<input type="text" id="amount2" style="border: 0; color: #f6931f; font-weight: bold;" value = "$1600"/>
</p>
<div id="slider_range"></div>
<input name="" type="button" value="step 1" id="check_moiki">
</body>
</html>
|
| Часовой пояс GMT +3, время: 23:03. |