Google Maps API v3:使用复选框过滤标记,以显示多个类别的交集

时间:2013-07-16 15:49:01

标签: javascript html google-maps google-maps-api-3 google-maps-markers

我已经定义了如下所示的复选框:

enter image description here

<label><input type="checkbox" id="Business Development box" onclick="boxclick(this,'skills','Business Development')" /> Business Development </label>
<label><input type="checkbox" id="Capacity Building box" onclick="boxclick(this,'skills','Capacity Building')" />  Capacity Building </label> 
<label><input type="checkbox" id="Communications and Marketing box" onclick="boxclick(this,'skills','Communications and Marketing')" />  Communications and Marketing</label>
<label><input type="checkbox" id="Consulting box" onclick="boxclick(this,'skills','Documentary/Media')" /> Consulting</label>
<label><input type="checkbox" id="Documentary/Media box" onclick="boxclick(this,'skills','Documentary/Media')" /> Documentary/Media</label>
<label><input type="checkbox" id="Economic Development box" onclick="boxclick(this,'skills','Economic Development')" /> Economic Development</label>
<label><input type="checkbox" id="Entrepreneurship box" onclick="boxclick(this,'skills','Entrepreneurship')" /> Entrepreneurship</label>
<label><input type="checkbox" id="Event Planning box" onclick="boxclick(this,'skills','Event Planning')" /> Event Planning</label>
<label><input type="checkbox" id="Financial Management box" onclick="boxclick(this,'skills','Financial Management')" /> Financial Management</label>

复选框触发boxclick,它接收“类别”(技能)和类型(例如咨询)

boxclick看起来像这样:

 function boxclick(box,category,type) {
        if (box.checked) {
          show(category, type);

        } else {
          hide(category, type);
        }
      }

boxclick触发show,看起来像这样

 function show(category, type) {
       for (var i=0; i<gmarkers.length; i++) {
         if (gmarkers[i][category].toUpperCase().indexOf(type.toUpperCase()) !== -1) {
            gmarkers[i].setVisible(true);
         }
       }
       // == check the checkbox ==
       document.getElementById(type+" box").checked = true;
     }

gmarkers包含地图中的所有标记。 gmarkers[i][category]将包含个人拥有的所有技能,indexOf会检查该文本数组中是否包含'type'(例如,Consulting)。

我在开始时自动将所有标记设置为不可见(我无法想到另一种方便地过滤事物的方法),并且在每个复选框之后,所有具有该技能的学生都会出现。

问题 - 如果我点击两个复选框,UNION不会显示所有标记的INTERSECTION。如何修改代码才能显示INTERSECTION?我的javascript经验非常少,所以我很难解决这个问题。

可在此处找到临时运行示例:http://dreaminginswahili.com/admin/mapv4.html。如果我犯了任何其他新手的错误,请随时纠正我。

此外,这是一个动画的GIF动画:http://i.imgur.com/XdJTfDx.gif

干杯!

0 个答案:

没有答案