2013-03-08 3 views
2

Я создаю карту Google из API-интерфейса разработчика v3. Он заполнен маркерами, созданными динамически из ColdFusion, запрашивающим базу данных MsSQL.Как определить маркер карты google по клику?

<cfloop query="One"> 
<script>locations[<cfoutput>#One.userID#</cfoutput> 
] = new google.maps.LatLng(<cfoutput>#One.latLng#</cfoutput>); 
</script> 
</cfloop> 

Мне нужен способ, чтобы распознать маркер, когда его щелкнул, так что я могу отобразить данные адреса в окне ниже карты, а также higlight маркеры при нажатии кнопки ниже на странице.

+0

Это может помочь, чтобы показать нам JS, который вы используете для добавления маркеров тоже. Я бы добавил маркеры в массив, который затем упростил доступ к ним позже. – duncan

+0

Возможно, не имеет никакого отношения к –

ответ

5

В общем, вы, как правило, назначать собственные свойства маркера. Что-то вроде:

function markerClicked(e) { 
    console.log('Marker ' + marker.myData + ' has been clicked'); 
} 
var marker = new google.maps.Marker(...); 
marker.myData = 1; //this could be arbitrary data or even another object 
google.maps.event.addListener(marker, 'click', markerClicked); 

Однако добавление пользовательских данных в любой объект API Карт Google имеет риск. Код Google запутан, и внутренние (не документированные) свойства могут и могут измениться. Убедитесь, что ваше свойство указано таким образом, что оно не будет конфликтовать с каким-либо существующим свойством или будущим свойством. Совет. Выберите название свойства длиной более 3 букв.

Если вы собираетесь минимизировать/скомпилировать/сжать код вашей карты, то есть additional considerations.

0

Это полностью документировано/разъяснено в документации.

https://developers.google.com/maps/documentation/javascript/overlays#InfoWindows

При создании маркеров, добавить Dóm слушателей маркерам как этот

google.maps.event.addListener(marker, 'click', function() { 
    infowindow.open(map,marker); 
    }); 
+0

. Что вы имеете в виду, это не так? Да, это так - маркер, передаваемый в функцию щелчка, является объектом. Читайте на API карт google и javascript. – kevin

+0

Уверены, что у вас есть ссылка на маркер, который вы нажали, но если вы управляете своим собственным списком маркеров '[{marker: marker1, data: '1'}, {marker: marker2, data: '2'}, .. .] ', это не поможет вам искать маркер в массиве, не зацикливая на этом все. –

1

насчет:

google.maps.event.addListener(marker, "click", function (e) { 
    var clicked = this; 
    //... 
}); 
+0

Рассмотрите вопрос о расширении вашего ответа, чтобы объяснить, почему это достигает желаемого результата, возможно, связанного с документацией. Как есть, это лишь незначительно полезно. –