2011-09-21 80 views
3

我在点击鼠标时删除了一个标记时遇到问题。那么,事情并不像看起来那么简单。Google Maps Api - 用鼠标点击删除标记

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);代替警报时,它表示标记没有被定义,我不知道如何参考我刚刚点击的标记:S 也不能使用标记作为全局变量,因为我得到了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。这就是为什么我确定我需要使用“标记”。

+0

这是一个经典的问题 “在环路闭合”。这是和这里一样的问题:http://stackoverflow.com/questions/8325736/creating-markers-in-loop-infowindow-does-not-open-when-inside-an-click-listene/8326203#8326203 – TMS

回答

1

在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/

+0

在主帖中增加了“编辑”。当我尝试使用''Uncaught TypeError:Can not call method'setMap'of undefined'error时,我得到了'Uncaught TypeError:Can not call method'setMap'of undefined' error。 – Kedor

+0

哎呀抱歉,这是我的错误复制粘贴错误。在侦听器中使用'this'。生病编辑帖子。 –

+0

<3谢谢,接受答案,如果这意味着任何事情为你:) – Kedor