【发布时间】:2021-04-21 03:21:41
【问题描述】:
https://www.australianathleticscalendar.com.au/
这个网站最初有一个过滤器,但我添加了另一个,希望它们各自独立工作(即按类别(事件)过滤,也按状态过滤)。
它似乎仍然充当一个过滤器,因为我只能在设置的两个过滤器之间选择一个变量。如何调整功能以使每个过滤器独立运行?
function loadCategories() {
fetch(projectUrl + '/categories')
.then((response) => response.json())
.then(json => {
this.categories = json.categories;
drawCategories();
})
}
function loadStates() {
fetch(projectUrl + '/states')
.then((response) => response.json())
.then(json => {
this.states = json.states;
drawStates();
})
}
function drawProducts(products) {
var template = Handlebars.compile(document.getElementById("products-template").innerHTML);
document.getElementById('products-container').innerHTML = template({
title: this.title,
titleStates:this.titleStates,
products: products
});
}
function drawCategories() {
var template = Handlebars.compile(document.getElementById("menu-template").innerHTML);
console.log('draw ', this.products);
document.getElementById('menu-container').innerHTML = template(this.categories);
}
function drawStates() {
var template = Handlebars.compile(document.getElementById("menu-template-2").innerHTML);
console.log('draw ', this.products);
document.getElementById('menu-container-states').innerHTML = template(this.states);
}
function showAllProducts() {
this.title = "All Events";
drawProducts(this.products);
}
function showAllProducts() {
this.titleStates = "All States";
drawProducts(this.products);
}
function showCategory(category) {
this.title = category;
let filteredProducts = this.products.filter(product => {
return product.category.toLowerCase().includes(category.toLowerCase());
});
drawProducts(filteredProducts);
}
function showState(state) {
this.titleStates = state;
let filteredProducts = this.products.filter(product => {
return product.state.toLowerCase().includes(state.toLowerCase());
});
drawProducts(filteredProducts);
}
它们在菜单中被调用,这里有两个过滤器:
<!-- Categories/events filter -->
<div class="container">
<script id="menu-template" type="text/x-handlebars-template">
<ul class="navbar-nav">
{{#each this as |category|}}
<li class="nav-item"></li>
<a class="nav-link" href="#" onclick="showCategory('{{category.name}}');">{{category.name}}</a>
</li>
{{/each}}
<!-- <a id="all-events" href="#" onclick="showAllProducts();">All Events</a> -->
<a class="navbar-brand hover-color" href="#" onclick="showAllProducts();">All Events</a>
</ul>
<ul class="navbar-nav ml-auto"></ul>
<li class="nav-item">
</li>
</ul>
</div>
</script>
</div>
<!-- States filter -->
<div class="container">
<script id="menu-template-2" type="text/x-handlebars-template">
<ul class="navbar-nav">
{{#each this as |state|}}
<li class="nav-item"></li>
<a class="nav-link" href="#" onclick="showState('{{state.name}}');">{{state.name}}</a>
</li>
{{/each}}
<!-- <a id="all-events" href="#" onclick="showAllProducts();">All Events</a> -->
<a class="navbar-brand hover-color" href="#" onclick="showAllProducts();">All States</a>
</ul>
<ul class="navbar-nav ml-auto"></ul>
<li class="nav-item">
</li>
</ul>
</div>
</script>
</div>
【问题讨论】:
-
Javascript 与 java 无关。请删除 java 标签。
-
无法打开您的链接。请添加您调用这些函数的部分。
-
@trincot 我在调用它们的地方添加了 html。您应该可以在此处查看该站点:australianathleticscalendar.com.au
-
你有两倍的函数
showAllProducts:第一个将被第二个覆盖。这是复制/粘贴错误吗?如果你用把手标记这个问题,这个问题会得到更具体的关注,因为你的代码依赖于它。 -
我需要一个重置类别过滤器的 showAllCategories 和一个重置状态过滤器的 showAllStates,但是我不知道如何让它们单独运行
标签: javascript jquery web filtering