我想同时使用“或”和“和”逻辑组合多种类型的滤波器。例如,我尝试过滤我的标记,如下例所示: http://codepen.io/patrickkunka/pen/ltgde多维滤波
我已经放了多个标记,并且我创建了两个显示或隐藏标记的函数。 问题是,如果我显示来自GroupA的标记,然后选择编号为1的标记,则我将拥有编号为1的所有标记。或者目标是同时具有来自GroupA和Number 1的标记。
对不起,这是simpest我可以将其降低到:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Google Maps Multi-Filtering</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 500px; height: 400px;"></div>
<div id="multi_filters">
<div class="Group">
<a class="titre">Group</a></br>
<input type="checkbox" value="GroupA" onclick="displayGroup('GroupA');" checked>
<input type="checkbox" value="GroupB" onclick="displayGroup('GroupB');" checked>
</div>
</br>
<div class="Number">
<a class="titre">Number</a></br>
<input type="checkbox" value="Number1" onclick="displayNumber(1);" checked>
<input type="checkbox" value="Number2" onclick="displayNumber(2);" checked>
</div>
</div>
</body>
</html>
和JavaScript:
var markers =[];
var locations = [
['GroupA','Bondi Beach', -33.890542, 151.274856, 2],
['GroupB','Coogee Beach', -33.923036, 151.259052, 2],
['GroupA','Cronulla Beach', -34.028249, 151.157507, 1],
['GroupB','Manly Beach', -33.80010128657071, 151.28747820854187, 2],
['GroupA','Maroubra Beach', -33.950198, 151.259302, 1]
];
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: new google.maps.LatLng(-33.92, 151.25),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker, i;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][2], locations[i][3]),
map: map
});
marker.group= locations[i][0];
marker.number = locations[i][4];
markers.push(marker);
}
function displayGroup(group) {
var i;
for (i = 0; i < markers.length; i++) {
if (markers[i].group === group) {
if(!(markers[i].getVisible(true))){markers[i].setVisible(true);}
else{markers[i].setVisible(false);}
}
}
};
function displayNumber(number) {
var i;
for (i = 0; i < markers.length; i++) {
if (markers[i].number === number) {
if(!(markers[i].getVisible(true))){markers[i].setVisible(true);}
else{markers[i].setVisible(false);}
}
}
};
任何帮助,不胜感激!谢谢
复选框的使用,而不是点击按钮,然后你就可以选择多个条件。 –
谢谢你的帮助。我把复选框,但似乎这个问题似乎持续存在。例如,如果您取消选中所有复选框,则标记是可见的。 – Vincent
当然你必须改进你的过滤函数,看看我的答案。 –