Google maps api 3 使用多个[和相交]复选框过滤Google地图标记

Google maps api 3 使用多个[和相交]复选框过滤Google地图标记,google-maps-api-3,filter,checkbox,Google Maps Api 3,Filter,Checkbox,我无法使我的多重复选框过滤系统正常工作。我将解释这个问题,我在这里做的关于stackoverflow的研究,以及为什么在那之后我仍然需要帮助 我的问题是,当我逐渐取消选择标记时,我的复选框无法将其带回。当我单击这些过滤器时,它们工作得很好,因为它们会逐渐淡出与它们相关的标记。然而,在取消选中几个复选框之后,所有标记都会回到屏幕上,最后一个复选框在最终取消选中时不会执行任何操作 这是项目的临时URL: 这就是我被卡住的代码: //this getJson function exists withi

我无法使我的多重复选框过滤系统正常工作。我将解释这个问题,我在这里做的关于stackoverflow的研究,以及为什么在那之后我仍然需要帮助

我的问题是,当我逐渐取消选择标记时,我的复选框无法将其带回。当我单击这些过滤器时,它们工作得很好,因为它们会逐渐淡出与它们相关的标记。然而,在取消选中几个复选框之后,所有标记都会回到屏幕上,最后一个复选框在最终取消选中时不会执行任何操作

这是项目的临时URL:

这就是我被卡住的代码:

//this getJson function exists within an init funciton where a map 
//has already been called
$.getJSON(theUrl,function(result){



    $.each(result, function(i, item){

        //get Longitude
        var latCoord = item.coordinate;
        var parenthCoord = latCoord.indexOf(",");
        var partiaLat = latCoord.substr(1,parenthCoord-1);
        var lat = parseFloat(partiaLat);
        //alert(lat);

        //get Latitude
        var lngCoord = item.coordinate;
        var commaCoord = lngCoord.indexOf(",");
        var partiaLng = lngCoord.substr(commaCoord+1);
        var lng = parseFloat(partiaLng);
        //alert(lng);


        // display ALL the story markers
        var storyMarker;
        storyMarker = new google.maps.Marker({
            position: new google.maps.LatLng(lat, lng),// ----- > whithin the mutidimentional array, 
            map: map
        });


        //display the stories by clicking on the markers
        google.maps.event.addListener(storyMarker, 'click', function() {
            var from = "From ";
            if(item.end_date != ""){
                item.end_date = " to " + item.end_date;
            }
            else{
                from = "";
            }

            $('#output').html(
                '<p><span class="selected">Type of Entry: </span>' + 
                item.entry_type + ' <br/><br/>'+
                '<span class="selected">Title: </span>'+ item.entry_title + '<br/><br/>' +
                '<span class="selected">Date(s):</span><br/>'+ from +item.start_date+
                //' to '+item.end_date+'<br/><br/>'+
                item.end_date+'<br/><br/>'+
                '<span class="selected">Content:</span><br/><br/> '+ item.entry 
                +'</p>'
            );
        });// end of story displays


        //call filters from filter funciton
        filter('#evacuation-filter',item.evacuation,"Yes");
        filter('#evacuation-order-filter',item.evacuation_order,"Yes");
        filter('#w-nearby-filter',item.w_nearby,"Yes");
        filter('#hurricane-reached-filter',item.hurricane_reached,"Yes");
        filter('#outdoors-filter',item.in_out_doors,"Outdoors Most of the Time");
        filter('#indoors-filter',item.in_out_doors,"Indoors Most of the Time");
        filter('#food-filter',item.food,"Yes");
        filter('#windows-filter',item.windows,"Yes");
        filter('#power-filter',item.power,"Yes");
        filter('#wounded-filter',item.wounded,"Yes");
        filter('#looting-filter',item.looting,"Yes");
        filter('#blackouts-filter',item.blackouts,"Yes");
        filter('#trees-filter',item.trees,"Yes");
        filter('#powerlines-filter',item.powerlines,"Yes");
        filter('#light-filter',item.light,"Yes");
        filter('#sidewalks-filter',item.sidewalks,"Yes");
        filter('#buildings-filter',item.buildings,"Yes");
        filter('#flooding-filter',item.flooding,"Yes");


        //FILTER FUNCTION
        //first parameter is the checkbox id, the second is the filter criteria
        //(the filter function has to be called within the $.each loop to be within scope)

        var otherFilter = false;

        function filter(id, criterion1, value){

            var activeFilters = [];

            $(id).change(function() {
                //evalute if the checkbox has been "checked" or "unchecked"
                var checkBoxVal = $(id).attr("checked");

                //if it's been checked:
                if(checkBoxVal=="checked"){
                    //1 - Get markers that don't talk about the filter
                    if(criterion1!=value && storyMarker.getVisible()==true){
                        //2 - fade them away, and leave only those meet the criteria
                        storyMarker.setVisible(false); 
                        otherFilter = true;
                        activeFilters.push(criterion1);
                        //document.getElementById("text3").innerHTML=activeFilters+"<br/>";
                        //alert(activeFilters.push(criterion1) +","+criterion1.length);
                    }
                }
                //if it's been unchecked:
                else if(checkBoxVal==undefined){
                    //1 - Get markers that don't talk about the filter
                    if(criterion1!=value && storyMarker.getVisible()==false){
                        //2 - Show them again
                        storyMarker.setVisible(true);
                        otherFilter = false;
                        activeFilters.pop(criterion1);
                        //alert(activeFilters.pop(criterion1) +","+criterion1.length);
                    } //end of if to cancel filter and bring markers and stories back
                }

            }); // end of change event

        } // end of filter function


        //var otherDropDown = false;
        filter2("#media-filter",item.media);
        filter2("#authorities-filter",item.authorities);

        //---------------

        function filter2(id2,criterion2){

            $(id2).change(function() {
                //get the value of the drowpdown menu based on its id
                var dropDownVal = $(id2).attr("value");
                var all="All";
                //if the value isn't "All", other filters have not been applied, and marker is on screen
                if(dropDownVal!=all && otherFilter==false){
                    //1 - check if the marker doesn't comply with filter
                    if(criterion2!=dropDownVal){
                        //2 - fade them away if not, and leave only those meet the criteria
                        storyMarker.setVisible(false);
                    //3 - If the marker does comply with it
                    }else if(criterion2==dropDownVal){
                        //4 - keep it there
                        storyMarker.setVisible(true);
                    }//end of filter applier
                //else if if the value IS "All", filters have not been applied, and marker is faded
                }else if(dropDownVal==all && otherFilter==false){
                    //select all the possible values for the cirterion
                    if(criterion2!=undefined){
                        //and show all those markers
                        storyMarker.setVisible(true);
                    }
                }
            }); 
        }   //end of function filter2



    }); // end of $.each
}); // end of $.getJSON
//此getJson函数存在于映射
//已经打过电话了
$.getJSON(URL、函数(结果){
$。每个(结果、功能(i、项目){
//获得经度
var latCoord=项目坐标;
var parenthCoord=latCoord.indexOf(“,”);
var partiaLat=latCoord.substr(1,parenthCoord-1);
var-lat=parseFloat(partiaLat);
//警报(lat);
//获得自由
var lngCoord=项目坐标;
变量COMMACORD=lngCoord.indexOf(“,”);
var partiaLng=lngCoord.substr(COMMACORD+1);
var lng=浮动(部分);
//警报(液化天然气);
//显示所有故事标记
var故事标记;
storyMarker=新建google.maps.Marker({
位置:新的google.maps.LatLng(lat,lng),/->在多维数组中,
地图:地图
});
//通过单击标记显示故事
google.maps.event.addListener(故事标记,'click',函数(){
var from=“from”;
如果(item.end_date!=“”){
item.end_date=“to”+item.end_date;
}
否则{
from=“”;
}
$('#output').html(
“条目类型:”+
item.entry_type+“

”+ “Title:”+item.entry_Title+”

”+ “日期:
”+从+item.start\u日期+ //'至'+项目.结束日期+'

+ 项目结束日期+“

”+ 'Content:

'+item.entry +“

” ); });//故事结尾显示 //从筛选器函数调用筛选器 过滤器(“疏散过滤器”,项目。疏散,“是”); 过滤器(“疏散令过滤器”,项目。疏散令,“是”); 过滤器('w-nearest-filter',item.w#u nearest,“是”); 过滤器(“#飓风到达过滤器”,项目。飓风到达,“是”); 过滤器(“户外过滤器”,项目。在户外,“大部分时间在户外”); 过滤器(“‘室内过滤器’”,项目。在户外,“大部分时间在室内”); 过滤器(“#食品过滤器”,item.food,“是”); 过滤器(“#windows过滤器”,item.windows,“是”); 过滤器(“#电源过滤器”,项目。电源,“是”); 过滤器(“#受伤过滤器”,项目。受伤,“是”); 过滤器(“#洗劫过滤器”,项目。洗劫,“是”); 过滤器(“#断电过滤器”,项目。断电,“是”); 过滤器(“#trees filter”,item.trees,“Yes”); 过滤器(“#电源线过滤器”,项目。电源线,“是”); 滤光片(“#滤光片”,项目。灯,“是”); 过滤器(“人行道过滤器”,项目。人行道,“是”); 过滤器(“#建筑物过滤器”,项目.建筑物,“是”); 过滤器(“泛洪过滤器”,项目.泛洪,“是”); //过滤函数 //第一个参数是复选框id,第二个参数是筛选条件 //(必须在$内调用filter函数。每个循环都在作用域内) var-otherFilter=false; 函数筛选器(id、准则1、值){ var-activeFilters=[]; $(id).更改(函数(){ //如果复选框已“选中”或“未选中”,则评估 var checkBoxVal=$(id).attr(“已检查”); //如果已检查: 如果(checkBoxVal==“选中”){ //1-获取不涉及过滤器的标记 if(criterion1!=value&&storyMarker.getVisible()==true){ //2-淡出它们,只留下那些符合标准的 storyMarker.setVisible(false); otherFilter=true; activeFilters.push(标准1); //document.getElementById(“text3”).innerHTML=activeFilters+“
”; //警报(activeFilters.push(criterion1)+“,”+criterion1.length); } } //如果未选中: else if(checkBoxVal==未定义){ //1-获取不涉及过滤器的标记 if(criterion1!=value&&storyMarker.getVisible()==false){ //2-再次展示它们 storyMarker.setVisible(true); otherFilter=false; activeFilters.pop(标准1); //警报(activeFilters.pop(criterion1)+“,”+criterion1.length); }//结束if以取消筛选并带回标记和故事 } });//更改事件结束 }//过滤器函数结束 //var otherDropDown=false; 过滤器2(“介质过滤器”,项目.media); 过滤器2(“权限过滤器”,项目.权限); //--------------- 功能过滤器2(id2,标准2){ $(id2).change(函数(){ //根据DrowDown菜单的id获取其值 var dropDownVal=$(id2.attr(“值”); var all=“all”; //如果该值不是“全部”,则未应用其他过滤器,并且标记器显示在屏幕上 if(dropDownVal!=all&&otherFilter==false){
var all_markers = [];
storyMarker.end_date = item.end_date;
storMarker.title = item.title;
...
all_markers.push(storyMarker);
        // display ALL the story markers
        var storyMarker;
        storyMarker = new google.maps.Marker({
            position: new google.maps.LatLng(lat, lng),// ----- > whithin the mutidimentional array, 
            map: map
        });
storyMarker.pointer = [];
//alert(storyMarker.pointer);
        function filter(id,criterion,value){
            $(id).change(function() {
                var checkBoxVal = $(id).attr("checked");
                if(checkBoxVal=="checked"){
                    if(criterion!=value){
                        storyMarker.pointer.push("element");
                        //alert("array length: "+storyMarker.pointer.length);
                        if(storyMarker.pointer.length>0){
                            storyMarker.setVisible(false);
                        }
                    }
                }
                else if(checkBoxVal!="checked"){
                    if(criterion!=value){
                        storyMarker.pointer.pop("element");
                        //alert("array length: "+storyMarker.pointer.length);
                        if(storyMarker.pointer.length<=0){
                            storyMarker.setVisible(true);
                        }
                    }
                }
            });
        }