0

li要素をクリックするとマーカーがマップに追加される機能があります。別のliをクリックすると、元のマーカーが削除され、新しいマーカーが表示されます。

私が抱えている問題は、liが初めてクリックされたときにマーカーがマップ上に配置されることです。2番目の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

あなたはmarkersJson変数として定義しましたが、あなたが何を意味するのかわかりませんmarkers[selectionId]!マーカーは配列として定義されておらず、インデックスで参照するのは正しくないようです。

于 2012-07-15T21:10:23.627 に答える
0

コードをもう一度確認しましたが、問題はiteratorグローバルスコープで0に初期化されるにあると思います。そのため、最初は問題なく動作しますが、その後はインデックスが超過します。関数の最初でゼロに設定する必要があるようですdrop()。ただし、で処理されてコードを複雑にする外部変数
の代わりに、2番目のパラメーターとしてインデックスを渡す方が理にかなっています。addMarker()drop()

于 2012-07-18T11:11:00.717 に答える