Javascript 正在尝试选择“链过滤器”选项
我想链接我的两个过滤器,将一个特定的过滤器连接到我的google地图过滤器,如果按类别的过滤器标记已获得值,我希望按会话的过滤器从按类别的过滤器中获得值,然后与按会话的过滤器结合 这是我的代码,按类别和会话筛选:Javascript 正在尝试选择“链过滤器”选项,javascript,select-options,Javascript,Select Options,我想链接我的两个过滤器,将一个特定的过滤器连接到我的google地图过滤器,如果按类别的过滤器标记已获得值,我希望按会话的过滤器从按类别的过滤器中获得值,然后与按会话的过滤器结合 这是我的代码,按类别和会话筛选: // filter markers by category filterMarkers = function (category) { for (i = 0; i < gmarkers1.length; i++) { marker = gma
// filter markers by category
filterMarkers = function (category) {
for (i = 0; i < gmarkers1.length; i++) {
marker = gmarkers1[i];
// If is same category or category not picked
if (marker.category == category || category.length === 0) {
marker.setVisible(true);
}
// categories don't match
else {
marker.setVisible(false);
}
}
}
// filter markers by session
filterMarkersx = function (session) {
for (i = 0; i < gmarkers1.length; i++) {
marker = gmarkers1[i];
// If is same session or session not picked
if (marker.session == session || session.length === 0) {
marker.setVisible(true);
}
// session don't match
else {
marker.setVisible(false);
}
}
}
//按类别筛选标记
过滤器标记=功能(类别){
对于(i=0;i
这是我的选项选择代码以获取值:
<div class="controls">Filter By :
<select id="type" onchange="filterMarkers(this.value);">
<option value="">Merchant Grub</option>
<option value="STARBUCKS">STARBUCKS</option>
<option value="SIMPLY">SIMPLY</option>
<option value="SHIHLIN">SHIHLIN</option>
<option value="RE JUVE">RE JUVE</option>
<option value="PUYO">PUYO</option>
<option value="LOTTERIA">LOTTERIA</option>
<option value="KFC">KFC</option>
<option value="HOP HOP">HOP HOP</option>
<option value="DOMINOS">DOMINOS</option>
<option value="CIRCLE K">CIRCLE K</option>
<option value="CHATIME">CHATIME</option>
<option value="CFC">CFC</option>
<option value="BURGER KING">BURGER KING</option>
<option value="BREADLIFE">BREADLIFE</option>
<option value="BAKMI GM">BAKMI GM</option>
<option value=" AUNTIE ANNE'S">AUNTIE ANNE'S</option>
</select>
</div>
<div class="controls">Filter By :
<select id="type" onchange="filterMarkersx(this.value);">
<option value="">IN SESSION</option>
<option value="false">FALSE</option>
<option value="">TRUE</option>
</select>
</div>
过滤方式:
商人的食物
星巴克
简单地
石林
关于尤文
普约
乐透
肯德基
蹦蹦跳跳
多米诺骨牌
圆圈K
查蒂姆
氟氯化碳
汉堡王
面包生活
巴克米总经理
安妮阿姨家
筛选依据:
会期
错误的
真的
如何链接两个过滤器
例如:如果我在“按类别筛选”中选择“星巴克”,在“按会话筛选”中选择“false”,我可以得到星巴克false session的值
提前感谢,
Kraken对我来说,这些函数
filterMarkers
和filterMarkersx
并不是真正的“过滤器”,因为它们改变了gmarkers
”项,而不是返回此数组的子集。从过滤的角度来看,我重写了如下代码:
1.声明筛选函数
顺便说一句,由于这些函数完全相同,只是更改了正在测试的属性,因此您可以将它们分解为:
var filterBy = function (name, object) {
return function (marker) {
return !object.length || marker[name] == object;
}
};
2.使用过滤器
通过这种方式,您可以控制是链接过滤器还是仅使用其中一个过滤器
更新:更明确的用法定义
现在我们有了逻辑,我们想将这段代码连接到您的HTML
让我们将“2.使用过滤器”部分中的代码包装到函数中:
// assuming vanilla JS: binding the function to `document`
// (the purpose is just to make it callable from the HTML)
document.setMarkersVisibility = function () {
// first, fetch data from both <select> (category and session)
var selectCategory = document.getElementById('selectcategory');
var selectSession = document.getElementById('selectsession');
var category = selectCategory.options[selectCategory.selectedIndex].value;
var session = selectSession .options[selectSession .selectedIndex].value;
/* INSERT PART 2. CODE HERE */
};
及
这应该是所有需要的。你总是按2个条件过滤,而不是1。这就是为什么我在StackOverflow中请求。真的非常感谢你的帮助,你很好,但是因为我用你的代码替换了我的代码,这不起作用,真的很困惑。你是否用正确的
onchange
调用更新了你的HTML?我的意思是:“使用过滤器”部分应该包装在一个函数中,以便在表单更改时可以调用它-明白了吗?(因为在这里我理解“无效且无错误”中的“不工作”,对吗?)我写html选择这样,这是正确的?filterByCategory
,根据我在代码中的注释,“返回要传递给Array.prototype.filter的筛选函数”。因此,不,这是不正确的。我将更新我的答案,以清楚地说明用法(注释中过于复杂),最多给我15分钟。编辑完成后,检查更新,如果你想玩的话,我用这个(丑陋的)测试了代码。然而,我不明白你在gmarkers[]中有什么。session
:相关的
没有多大帮助,所以我的模型在这方面可能不是很好。但这可能是另一个故事!:P
// set all visibility to false for starters
gmarkers.forEach(function (m) {
m.setVisible(false);
});
// apply chained filtering then set visibility to true on resulting subset
gmarkers
.filter(filterBy('category', category)) // or .filter(filterByCategory(category))
.filter(filterBy('session', session)) // or .filter(filterBySession(session))
.forEach(function (marker) {
marker.setVisible(true);
});
// assuming vanilla JS: binding the function to `document`
// (the purpose is just to make it callable from the HTML)
document.setMarkersVisibility = function () {
// first, fetch data from both <select> (category and session)
var selectCategory = document.getElementById('selectcategory');
var selectSession = document.getElementById('selectsession');
var category = selectCategory.options[selectCategory.selectedIndex].value;
var session = selectSession .options[selectSession .selectedIndex].value;
/* INSERT PART 2. CODE HERE */
};
<select id="selectcategory" onchange="setMarkersVisibility()">
<select id="selectsession" onchange="setMarkersVisibility()">