Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于id从google maps API中删除多个标记_Javascript_Jquery_Google Maps Api 3 - Fatal编程技术网

Javascript 基于id从google maps API中删除多个标记

Javascript 基于id从google maps API中删除多个标记,javascript,jquery,google-maps-api-3,Javascript,Jquery,Google Maps Api 3,我使用ajax接收学生列表,并使用以下代码放置标记: jQuery.each( data, function( key, val ) { geocoder = new google.maps.Geocoder(); var color = $("select[name=color]", form).val(); var address = val["address"];

我使用ajax接收学生列表,并使用以下代码放置标记:

           jQuery.each( data, function( key, val ) {    
                geocoder = new google.maps.Geocoder();
                var color = $("select[name=color]", form).val();
                var address = val["address"];
                geocoder.geocode( { 'address': address}, function(results, status) {
                    if(results){
                      marker = new google.maps.Marker({
                            map: map,
                            position: results[0].geometry.location,
                            icon: "../image/icons/map/icon_marker"+color+".png",
                            title: val["name"],
                            id:val['id'],
                            url: ""
                        });

                    }
                });

            });
需要注意的是,val['id']不是该学生的唯一id,而是与以这种方式放置的所有标记关联的id。我假设这需要是一个类或其他东西,而不是一个id,但我不想改变它,除非我知道它是正确的


有没有一种方法可以调用每个具有给定id的标记并仅删除这些标记?我一直在一次为所有ID或1个ID寻找方法,但这两种方法都不符合我的目标。

创建一个MVCObject,并设置一个名称等于ID的属性,映射为值

//outside of $.each()
if(!students){
 students=new google.maps.MVCObject();
}

//inside of $.each()
if(!students.get(val['id'])){
  students.set(val['id'],map);
}
创建标记后,将标记的地图属性绑定到学生的特定项目:

并为标记添加map_changed-listener,以便在将map属性设置为null时解除其绑定:

要删除具有特定id的所有标记,只需调用:

students.set('theId',null);
与基于数组的方法相比,它的优点是:特别是当您有很多标记时,您不必迭代所有这些标记并检查id


演示:

在聊天室里,我在Ethaan的帮助下找到了答案。他帮我找到了问题所在

无论如何,这里是我的代码,工作正常。我传递给每个标记的id:val['id']是它连接到的窗体的名称。。。所以我只是在所有标记中循环并移除那些与给定id绑定的标记…我希望它不必是一个循环,也可以是一个remove all where id=form,但它现在起作用了

$("input[name=deleteLayer]").click(function(){
    //Get the name of the form that the button "deleteLayer" belongs to
    var formName = $(this).closest("form").attr('name');
    for(var $x = 0; $x < markersArray.length; $x++){
        //markersArray is an array that holds all the markers
        if(markersArray[$x]["id"] == formName){
            var removeMarkers = markersArray[$x];
            removeMarkers.setMap(null);
        }
    }
});

你有没有一个标记数组或者什么东西来存储所有的标记?我可以我猜我只是不明白怎么。。。是否有与每个阵列关联的id?它是否简单到给每个标记一个Id为1的标记,然后删除每个标记为1的标记?您可以有类似var markers=[]的内容,当您添加一个新标记时,请使用markers.pushmarker。基于此,我们可以做一些验证来删除marker我该如何从中调用一组特定的marker来删除?会是这样吗?var removeMarkers=markers[someKey];removeMarkers.setMapnull;
students.set('theId',null);
$("input[name=deleteLayer]").click(function(){
    //Get the name of the form that the button "deleteLayer" belongs to
    var formName = $(this).closest("form").attr('name');
    for(var $x = 0; $x < markersArray.length; $x++){
        //markersArray is an array that holds all the markers
        if(markersArray[$x]["id"] == formName){
            var removeMarkers = markersArray[$x];
            removeMarkers.setMap(null);
        }
    }
});