如何从数组中选择特定标记
How can I select a specific marker from my array?
我在这里发现了一些接近我的问题:存储谷歌地图标记并从中选择一个特定的标记
然而,我已经认真研究了那里的代码,只是不太清楚如何将其实现到我的代码中。这是我所拥有的:
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));
};
此代码在initialize函数中。
我把这段代码放在函数外的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;
};
尽管我更喜欢直接选择标记,但我还是选择了以下代码:
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;
};
我认为,由于标记已经有了一个监听器,所以添加另一个监听器可能无论如何都不会起作用
如果您只想在单击标记时执行某些操作,则不需要属性ID。您只需要在创建标记时将侦听器链接到标记即可。
将标记数据存储在对象数组中。。。
var markersData = [
{
lat: 40.6386333,
lng: -8.745,
name: "Marker 1"
},
{
lat: 40.59955,
lng: -8.7498167,
name: "Marker 2"
}
];
现在markersData[0]中有Marker 1,markersData[1]中有Marker2。
一个琐碎的初始化函数。请注意,您通过调用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);
现在显示Markers功能:
// 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);
});
}
相关文章:
- 如何在javascript中使用click函数选择数组元素
- 如何根据下拉选择来选择数组的第一列
- 如何在加号运算符之后选择数组元素的一部分
- 如何选择数组中的第一个对象(当 array[0] 不起作用时)
- jQuery:如何获取选择数组中元素的索引
- 选择数组的随机元素来设置Youtube视频ID API
- 使用计数器更改选择数组名称
- AngularJs 帮助,在传递给隔离范围的对象中选择数组时遇到问题
- PHP 从“选择 - 数组”字段中填充文本框
- 在 jsrender 中选择数组的一部分
- JavaScript 如何使用 NOT 的索引与选择数组
- 如何随机选择数组
- 对象数组-选择数组子集,其中对象属性为值数组
- 未选择数组中的最后一项
- Jquery 选择数组中括号之间的文本
- (如何)除了math.random随机选择的一个元素外,我可以选择数组中的所有元素吗
- 从Javascript对象中选择数组
- 如何通过每次单击来选择数组的新索引
- 如何有效地随机选择数组项而不重复
- 如何只选择数组中的特定值