0

我的想法是使用处理地图的点击事件来创建标记。然后处理标记的单击事件以显示该标记的 lat()。但是,它总是在数组中显示最终标记的 lat()。我无法解决这个错误。请帮我解决这个问题。谢谢大家

function addMarker(location){
var goldStar = {
    path: google.maps.SymbolPath.CIRCLE,
    fillColor: "yellow",
    fillOpacity: 0.8,
    scale: 1,
    strokeColor: "gold",
    strokeWeight: 14
};      
mar = new google.maps.Marker({
    position: location,
    animation: google.maps.Animation.DROP,
    icon: goldStar, //or use image
    title: "Hello",
    map: map
});
makerArray.push(mar);
//console.log(makerArray.length);
//click_Marker(mar);
google.maps.event.addListener(mar, 'click', function(){
        alert(mar.getPosition().lat());
});}

function initialize(){
var mapOptions = {
    zoom: 12,
    overviewMapControl: false,
    mapTypeId: google.maps.MapTypeId.ROADMAP,   
};
map = new google.maps.Map(document.getElementById("map"), mapOptions);;
GetCurrentLocation(map);

//Hướng dẫn đi
directionDisplay.setMap(map);
directionDisplay.setPanel(document.getElementById("direction"));

getData();
showListRestaurant();
//Thêm địa điểm vào bản đồ
google.maps.event.addListener(map, 'click', function(event){
        addMarker(event.latLng);    
    });

}

4

1 回答 1

3

如果那是您的完整代码,那么您缺少varmar变量的声明。

mar = new google.maps.Marker({
    position: location,
    animation: google.maps.Animation.DROP,
    icon: goldStar, //or use image
    title: "Hello",
    map: map
});

应该在开头有一个 var

var mar = new google.maps.Marker({
    position: location,
    animation: google.maps.Animation.DROP,
    icon: goldStar, //or use image
    title: "Hello",
    map: map
});

这可以解释您的问题,因为您添加的每个标记都是对同一对象的引用,因此每次您向 中添加新的点击事件时mar,实际上都是在更新同一对象的点击事件。结果是所有点击事件都具有相同的值。

这是一个有效的jsfiddle:

http://jsfiddle.net/NGja4/50/

于 2013-03-14T10:31:14.010 回答