gpt4 book ai didi

javascript - Google map 信息窗口仅显示在 JavaScript 中的一个标记上

转载 作者:行者123 更新时间:2023-11-30 11:57:57 25 4
gpt4 key购买 nike

我正在开发一个提供基于位置的服务的网站。因此,我正在使用 JavaScript 将我的网站与 Google Map API 集成。然后我将数据导入 map 并将每个项目显示为 map 上的标记。导入数据并将其显示为 map 上的标记工作正常。

但是我在为 map 上的每个标记显示信息窗口时遇到了问题。问题是我的 map 上有两个标记,但是当我点击任何项目时,信息窗口总是显示在同一个项目上。请查看下面的屏幕截图。

enter image description here

如您在屏幕截图中所见,我单击了右侧的标记,但信息窗口显示在不同的项目上。

这是我完整的 map JavaScript:

    var map;

function initialize() {
var lat = $('.region-latitude').val();
var long = $('.region-longitude').val();
map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: new google.maps.LatLng(lat, long),
mapTypeId: google.maps.MapTypeId.TERRAIN
});

var script = document.createElement('script');
script.src = $('.map-items-url').val();
document.getElementsByTagName('head')[0].appendChild(script);
}

window.items_callback = function (results) {

for (var i = 0; i < results.features.length; i++) {
var coords = results.features[i].geometry.coordinates;

var latLng = new google.maps.LatLng(coords[0], coords[1]);
var itemMarker = new google.maps.Marker({
position: latLng,
map: map,
title: results.features[i].name
});

var contentString = '<h3>' + results.features[i].name + '</h3>';

var infowindow = new google.maps.InfoWindow({
content: contentString
});

itemMarker.addListener('click', function () {
infowindow.open(map, itemMarker);
});

}
}

google.maps.event.addDomListener(window, 'load', initialize)

我的代码有什么问题?如何为每个标记显示不同的信息窗口?

最佳答案

这看起来像是范围问题。在激活 click 处理程序时,itemMarker 指向最后添加的标记,infowindow 指向最后创建的信息窗口。这就是为什么它总是只显示在最后添加的标记上。您必须创建一个封装这些变量的范围。

试试这个:

for (var i = 0; i < results.features.length; i++) {
(function(index){
var coords = results.features[index].geometry.coordinates;

var latLng = new google.maps.LatLng(coords[0], coords[1]);
var itemMarker = new google.maps.Marker({
position: latLng,
map: map,
title: results.features[index].name
});

var contentString = '<h3>' + results.features[index].name + '</h3>';

var infowindow = new google.maps.InfoWindow({
content: contentString
});

itemMarker.addListener('click', function () {
infowindow.open(map, itemMarker);
});

})(i);
}

有关更多信息,请查看此 SO question and answer还有this SO question and answers .还有 this是一篇关于范围问题的好文章。

关于javascript - Google map 信息窗口仅显示在 JavaScript 中的一个标记上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37409872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com