我有这个jsfiddle http://jsfiddle.net/danieltulp/gz5gN/
我想做的是用大约6个滑块过滤数据属性上的无序列表。但是对于我的开发,我只使用了两个
第一个问题:质量滑块工作得很好,但是当我滑动价格滑块时,它将minP和maxP变量视为对象,为什么?我怎么才能修复它呢?
第二个问题:我的代码现在乱七八糟,我必须编写特定于每个过滤器的代码(即:价格、质量等),我如何简化/缩短我的代码?
来自fiddle的代码:
Html
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"o/>
<div class="demo">
price<br />
<div id="price"></div>
quality<br />
<div id="quality"></div>
<ul id="products">
<li data-price="10" data-quality="20"> product - £10 q20</li>
<li data-price="50" data-quality="40"> product - £50 q40</li>
<li data-price="100" data-quality="80"> product - £100 q80</li>
<li data-price="150" data-quality="30"> product - £150 q30</li>
<li data-price="200" data-quality="40"> product - £200 q40</li>
</ul>
</div>Javascript
function showProducts(minP, maxP, minQ, maxQ) {
$("#products li").filter(function() {
var price = parseInt($(this).data("price"), 10);
var quality = parseInt($(this).data("quality"), 10);
if(price >= minP && price <= maxP && quality >= minQ && quality <= maxQ){
$(this).show();
} else {
$(this).hide();
}
});
}
$(function() {
var options = {
range: true,
min: 0,
max: 250,
values: [0, 250],
slide: function(event, ui) {
if(event.target.id = "price"){
var minP = ui.values[0],
maxP = ui.values[1],
minQ = $("#quality").slider("values", 0),
maxQ = $("#quality").slider("values", 1);
}
if(event.target.id = "quality"){
var minP = $("#price").slider("values", 0),
maxP = $("#price").slider("values", 1),
minQ = ui.values[0],
maxQ = ui.values[1];
}
alert(minP +", "+ maxP +", "+ minQ +", "+ maxQ);
showProducts(minP, maxP, minQ, maxQ);
}
};
$("#price").slider(options);
$("#quality").slider(options);
});编辑:最小最大变量是对象的第一个问题也发生在质量滑块上,如果我将质量的if语句移到价格的上面。然后,价格值才是正确的。因此,滑动函数中的if语句似乎存在问题。
发布于 2012-07-30 16:55:31
似乎有一个非常方便的名为filter.js的jquery插件
演示:http://jiren.github.com/filter.js/filterjs.html
github:https://github.com/jiren/filter.js
教程:http://blog.joshsoftware.com/2011/09/28/filter-js-client-side-search-filtering-using-json-and-jquery/
发布于 2012-07-27 20:40:00
似乎将幻灯片事件更改为change允许我使用
change: function(event, ui) {
var minP = $("#price").slider("values", 0);
var maxP = $("#price").slider("values", 1);
var minQ = $("#quality").slider("values", 0);
var maxQ = $("#quality").slider("values", 1);
showProducts(minP, maxP, minQ, maxQ);
}对于滑动事件,这是不可能的,因为这些语句会采用旧值,因为滑动事件是在滑动过程中触发的(在iPad上测试,我不确定这是如何与实际鼠标一起工作的)有关详细信息,请参阅http://jqueryui.com/demos/slider/#event-slide
工作jsfiddle http://jsfiddle.net/danieltulp/gz5gN/42/
现在我仍然需要简化/缩短我的代码
编辑
我有一个至少让代码更清晰的想法。
首先,我需要确定滑动值是增加了还是减少了,然后我可以只筛选显示或隐藏的列表项,以便隐藏或显示
这只允许影响已经过滤的列表项,所以我不需要像在前面的代码中那样再次隐藏它们
但是我的jsfiddle在代码中的某些地方中断了,但是我不能缩小范围,你有什么想法吗?http://jsfiddle.net/danieltulp/4uF3e/4/
https://stackoverflow.com/questions/11675531
复制相似问题