2015-04-03 28 views
1

我發現的東西是接近這裏我的問題:Storing Google Map Markers and Selecting a specific marker from it如何從我的陣列中選擇特定標記?

不過,我已經研究了代碼中有硬,我不能完全弄清楚如何落實到我的。這裏是我有:

var t = { 
    name:"sdf", 
    lat:123, 
    lng:-123, 
    address:"asd", 
    link:"http://www.google.com" 
    }; 

    a[0] = t; 

    var t = { 
    name:"sdf", 
    lat:123, 
    lng:-123, 
    address:"asd", 
    link:"http://www.google.com" 
    }; 

    a[1] = t; 

for (var i = 0; i < a.length; i++) { 
     var latlng = new google.maps.LatLng(a[i].lat,a[i].lng); 
     map.addMarker(createMarker(a[i].name,latlng,a[i].address,a[i].link)); 
    }; 

此代碼是在初始化函數。

我把這個代碼的功能外DOM接聽後初始化:

google.maps.event.addListener(marker[[a[0]], "click",function(){ 
     alert("worked!") 
    }); 

事情是,我需要能夠選擇一個特定的標記做一些事情比其他人不同。

我甚至試着給一個額外的變量賦值,就像他們在鏈接中做的那樣[0]。但是將該變量放在標記括號中也不起作用。

下面是創建標記代碼:

function createMarker(name,latlng,address,link) { 
    var marker = new google.maps.Marker({position: latlng, map: map}); 
    google.maps.event.addListener(marker, "click", function() { 
     if (infowindow) infowindow.close(); 
     infowindow = new google.maps.InfoWindow({content:"<div class='buildingInfo'>" + name + "<br>" + "<a href='" + link + "'>" + address +"</a>" + "</div>"}); 
     infowindow.open(map, marker); 
    }); 
    return marker; 

    }; 
+0

@geocodezip OMG認真什麼都?你會停止獲得如此的技術和downvoting我的帖子?我不在乎它們包含什麼!我正在嘗試選擇特定的一個。它們使用[0] = t放置在數組中。請停止關注我的代碼中的內容,而是請關注我的代碼。 – Christine268 2015-04-03 18:00:53

+0

** http://stackoverflow.com/questions/24697284/google-api-multiple-markers-with-different-colours-depending-on-a-class/24697331#24697331**我認爲這有幫助 – HoangHieu 2015-04-03 19:12:14

回答

0

雖然我更願意直接選擇標記,我選定了下面的代碼:

function createMarker(name,latlng,address,link) { 
    var marker = new google.maps.Marker({position: latlng, map: map}); 
    google.maps.event.addListener(marker, "click", function() { 
     if(name == "name"){ 
     alert("worked!"); 
     } 
     if (infowindow) infowindow.close(); 
     infowindow = new google.maps.InfoWindow({content:"<div class='buildingInfo'>" + name + "<br>" + "<a href='" + link + "'>" + address +"</a>" + "</div>"}); 
     infowindow.open(map, marker); 
    }); 
    return marker; 

    }; 

我想既然該標記已經有了一個監聽器,但它可能無法工作來添加另一個監聽器。

0

如果您只是想在點擊標記時執行某些操作,則不需要爲標識進行標識。創建它們時,只需將偵聽器鏈接到標記。

您存儲標記數據對象數組......

var markersData = [ 
    { 
     lat: 40.6386333, 
     lng: -8.745, 
     name: "Marker 1" 
    }, 
    { 
     lat: 40.59955, 
     lng: -8.7498167, 
     name: "Marker 2" 
    } 
]; 

現在你在markersData有標記1 markersData [0]和標記2 [1]。

一個簡單的初始化函數。請注意,您可以通過調用displayMarkers()來開始標記創建。

function initialize() { 
    var mapOptions = { 
     center: new google.maps.LatLng(40.601203,-8.668173), 
     zoom: 9, 
     mapTypeId: 'roadmap', 
    }; 

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

    // displayMarkers() function is called to begin the markers creation 
    displayMarkers(); 
} 
google.maps.event.addDomListener(window, 'load', initialize); 

現在displayMarkers功能:

// This function will iterate over markersData array 
// creating markers with createMarker function 
function displayMarkers(){ 

    // this variable sets the map bounds and zoom level according to markers position 
    var bounds = new google.maps.LatLngBounds(); 

    // For loop that runs through the info on markersData making 
    // it possible to createMarker function to create the markers 
    for (var i = 0; i < markersData.length; i++){ 

     var latlng = new google.maps.LatLng(markersData[i].lat, markersData[i].lng); 
     var name = markersData[i].name; 

     createMarker(latlng, name); 

     // Marker’s Lat. and Lng. values are added to bounds variable 
     bounds.extend(latlng); 
    } 

    // Finally the bounds variable is used to set the map bounds 
    // with API’s fitBounds() function 
    map.fitBounds(bounds); 
} 

最後createMarkers功能,在這裏設置監聽到你想要它做

// This function creates markers (one at a time) and sets a listener to each marker 
function createMarker(latlng, name){ 
    var marker = new google.maps.Marker({ 
     map: map, 
     position: latlng 
    }); 

    // THIS IS WHAT YOU WANT... 
    // This event expects a click on a marker 
    // When this event is fired it opens the alert message 
    google.maps.event.addListener(marker, 'click', function() { 

     alert("worked! This is marker: " + name); 

    }); 
} 
+0

這實質上是我解釋了我必須在我提出的答案中做的事情。在您的createMarker(latlng,name)函數中,您的警報可以指定哪個標記被點擊。但是,我可能沒有很好地解釋這個部分,我只需要添加一個監聽器,而不是所有的監聽器。下面是我的結論。我只是忘了顯示我添加了名稱:屬性到我的數組標記。 – Christine268 2015-04-06 13:53:37