0

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

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

$(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);
    }
  }
}
4

2 回答 2

0

您已定义markers为 Json 变量,但我不知道您的意思是什么markers[selectionId]!标记未定义为数组,按索引引用它似乎是不正确的!

于 2012-07-15T21:10:23.627 回答
0

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

于 2012-07-18T11:11:00.717 回答