3

マウス クリックでマーカーを削除すると問題が発生しました。まあ、物事は見た目ほど単純ではありません。

function addPoint(event) {
path.insertAt(path.length, event.latLng);

var marker = new google.maps.Marker({
  position: event.latLng,
  map: map
});
markers.push(marker);
google.maps.event.addListener(marker, 'click', function() {
  marker.setMap(null);
  markers.splice(i, 1);
  }
);

そのコードを使用した場合、マーカーを作成するときにすぐにリスナーを追加し、それを削除するのは簡単marker.setMap(null);です。しかし、私の場合、それらを作成してから、それらを使用してイベントリスナーを追加したいと考えています

function usun(){
for (var i=0; i<markersArray.length; i++){
    google.maps.event.addListener(marker, 'click', function() {
        alert('lol');
    });
}

各マーカーにイベントを追加できるように各マーカーをプッシュしてmarkersArrayいますが、どうすれば削除できますか? アラートの代わりに配置すると、マーカーが定義されていないと表示され、クリックしたばかりのマーカーをどのように参照できるかわかりません。エラーが発生marker.setMap(null);しているため、マーカーをグローバル変数として使用することもできません。Uncaught TypeError: Cannot read property '__e3_' of undefined

編集:私が使用しようとすると

function usun(){
for (var i=0; i<markersArray.length; i++){
    google.maps.event.addListener(markersArray[i], 'click', function() {
        markersArray[i].setMap(null);
    });
}

エラーが発生しますUncaught TypeError: Cannot call method 'setMap' of undefined。そのため、「マーカー」を使用する必要があると確信していました。

4

1 に答える 1

2

for ループでは、配列内にあるマーカーを参照していません。

これを試して:

function usun(){
for (var i=0; i < markersArray.length; i++){

    google.maps.event.addListener(markersArray[i], 'click', function() {
        this.setMap(null);
    });

}

作業例: http://jsfiddle.net/52nJc/1/

于 2011-09-21T17:53:37.783 に答える