javascript google maps api删除标记

时间:2012-07-15 17:14:11

标签: javascript google-maps

我有一些功能,当点击li元素时,标记会添加到地图中。如果单击另一个li,则删除原始标记并显示新标记。

我遇到的问题是,当第一次点击li时,标记会被放置在地图上。单击第二个li时,将删除标记但不添加新标记。我在firebug中没有错误。我看不出我错过了什么。

$(document).ready(function() {

    $(".markerSelection").click(function() {
      var selectionId = $(this).attr("id");
      drop(selectionId);
    }); 
});



var markers = {
    shopping : [
    new google.maps.LatLng(52.26183, -7.11339),
    new google.maps.LatLng(52.26134, -7.11226),
    new google.maps.LatLng(52.26067, -7.11181),
    new google.maps.LatLng(52.26003, -7.11033)],
    cars : [
    new google.maps.LatLng(52.26183, -7.11339),
    new google.maps.LatLng(52.26134, -7.11226),
    new google.maps.LatLng(52.26067, -7.11181),
    new google.maps.LatLng(52.26003, -7.11033)] 
};

var iterator = 0; 

function drop(selectionId) {
    clearOverlays();
    for (var i = 0; i < markers[selectionId].length; i++) {
    setTimeout(function() {
    addMarker(selectionId);
    }, i * 200);
    }
}

function addMarker(selectionId) {
    marker = new google.maps.Marker({
    position: markers[selectionId][iterator],
    map: map,
    draggable: false,
    animation: google.maps.Animation.DROP
    });
    iterator++;
    markersArray.push(marker);
}

// Removes the overlays from the map, but keeps them in the array
function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

2 个答案:

答案 0 :(得分:0)

您已将 markers 定义为Json变量,但我不知道markers[selectionId]的含义!标记未被定义为数组,并且通过索引引用它似乎不正确!

答案 1 :(得分:0)

我再次审核了您的代码,我认为问题出在iterator,在全局范围内初始化为0。这就是为什么它第一次工作正常,但在那之后,指数超过了。看来你应该在drop()函数的开头将它设置为零。
但是,如果将index作为addMarker()的第二个参数而不是drop()中处理的外部变量,并使代码复杂化,则更有意义。