2016-04-01 20 views
0

Ürünleri filtrelemek için jQuery kaydırma diskini kullanıyorum. Senaryodaki filtrelemenin değerini ayarladın - ama sayfamdaki veri özniteliğini kullanan en yüksek/en düşük sayıya dayanarak değeri dinamik olarak ayarlamayı tercih ederim.jQuery fiyat filtresi - filtre nesnesindeki slayt değerlerini ayarlama

Bu mümkün mü?

Filtre nesneleri:

<div class="priceinfo col5" data-price="100">100</div> 
<div class="priceinfo col5" data-price="1000">1000</div> 

Senaryo:

function showProducts(minPrice, maxPrice) { 
$("#products li").hide().filter(function() { 
    var price = parseInt($(this).data("price"), 10); 
    return price >= minPrice && price <= maxPrice; 
}).show(); 
} 

$(function() { 
var options = { 
    range: true, 
    min: 0, 
    max: 500, 
    values: [50, 300], 
    slide: function(event, ui) { 
     var min = ui.values[0], 
      max = ui.values[1]; 

     $("#amount").val("$" + min + " - $" + max); 
     showProducts(min, max); 
    } 
}, min, max; 

$("#slider-range").slider(options); 

min = $("#slider-range").slider("values", 0); 
max = $("#slider-range").slider("values", 1); 

$("#amount").val("$" + min + " - $" + max); 

showProducts(min, max); 
}); 

http://jsfiddle.net/5aPg7/

cevap

1

Tüm price değerlerini almak ve ardından max

function showProducts(minPrice, maxPrice) { 
 
    $("#products li").hide().filter(function() { 
 
    var price = parseInt($(this).data("price"), 10); 
 
    return price >= minPrice && price <= maxPrice; 
 
    }).show(); 
 
} 
 

 
$(function() { 
 
    var prices = $('#products li').map(function() { 
 
    return $(this).data('price'); 
 
    }).get(); 
 
    var options = { 
 
     range: true, 
 
     min: Math.min.apply(Math, prices), 
 
     max: Math.max.apply(Math, prices), 
 
     values: [50, 300], 
 
     slide: function(event, ui) { 
 
     var min = ui.values[0], 
 
      max = ui.values[1]; 
 

 
     $("#amount").val("$" + min + " - $" + max); 
 
     showProducts(min, max); 
 
     } 
 
    }, 
 
    min, max; 
 

 
    $("#slider-range").slider(options); 
 

 
    min = $("#slider-range").slider("values", 0); 
 
    max = $("#slider-range").slider("values", 1); 
 

 
    $("#amount").val("$" + min + " - $" + max); 
 

 
    showProducts(min, max); 
 
});
.demo { 
 
    padding: 25px; 
 
}
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.js"></script> 
 
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.css"> 
 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> 
 
<div class="demo"> 
 

 
    <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> 
 
    <ul id="products"> 
 
    <li data-price="10">product - £10</li> 
 
    <li data-price="50">product - £50</li> 
 
    <li data-price="100">product - £100</li> 
 
    <li data-price="150">product - £150</li> 
 
    <li data-price="200">product - £200</li> 
 
    </ul> 
 
</div>
gibi & dk bulabilirsiniz

+0

Vay bu çok ilginçti. Çok iyi çalışıyor. Bir takip sorusu - değeri (değerler: [50, 300],) en düşük/en yüksek sayı olarak ayarlamak mümkün mü? Temel olarak kaydırıcıyı her iki uçta da genişletilecek şekilde almaya çalışıyorum. –

+0

@JerrySvensson üzgünüm, seni tamamen aldığımdan emin değilim –

+0

Üzgünüm - yansımaya çalışın. slidebar - tanımlı değere (değerler: [50, 300]) göre gösterilir ama dinamik değer (min: Math.min.apply (Math, prices), max: Math.max.apply başına gösterilmesini istiyorum. (Math, prices),) tje sldiebar'ın hiç boş alana sahip olmaması - en düşük sayı ile başlayıp en yüksek –

İlgili konular