#javascript #filtering
#javascript #фильтрация
Вопрос:
Я использую эту библиотеку: http://listjs.com /
Мне нужно добавить еще одну категорию для фильтрации, поэтому я добавил вот так:
<script type="text/javascript">
/*
* LOVELY THINGS
*/
var templates = {
valueNames: [ 'name', 'description', 'category' ]
};
var featureList = new List('lovely-things-list', templates);
$('#filter-games').click(function() {
featureList.filter(function(values) {
if (values.category == "Game") {
return true;
} else {
return false;
}
});
return false;
});
$('#filter-NewCategory').click(function() {
featureList.filter(function(values) {
if (values.category == "NewCategory") {
return true;
} else {
return false;
}
});
return false;
});
$('#filter-beverages').click(function() {
featureList.filter(function(values) {
if (values.category == "Beverage") {
return true;
} else {
return false;
}
});
return false;
});
$('#filter-none').click(function() {
featureList.filter(function(values) {
return true;
});
return false;
});
</script>
И кнопка, подобная этой:
<li class="btn" id="filter-NewCategory">Only show New Category</li>
Тогда фильтрация работает некорректно. Первая кнопка для первой категории работает, вторая добавляет некоторые результаты, третья иногда работает и т. Д.
Может быть, кто-нибудь знает, что я делаю не так?
Ответ №1:
Атрибут, который получает функция фильтрации, представляет собой один элемент. Для сравнения необходимо выполнить следующее:
$('#filter-games').click(function() {
featureList.filter(function(item) {
if (item.values().category == "Game") {
return true;
} else {
return false;
}
});
return false;
});
И для сброса фильтра вы можете просто сделать
featureList.filter();
Полный пример здесь:
http://pastebin.com/UPB095pk
Ответ №2:
Похоже, ваш second .click привязан к #filter-games, когда вы хотите привязаться к #filter-NewCategory?
Попробуйте изменить код на чтение:
$('#filter-NewCategory').click(function() {
featureList.filter(function(values) {
if (values.category == "NewCategory") {
return true;
} else {
return false;
}
});
return false;
});