gpt4 book ai didi

javascript - 无法读取未定义的属性 'open'。谷歌地图信息窗口循环

转载 作者:行者123 更新时间:2023-11-28 15:29:51 28 4
gpt4 key购买 nike

我正在使用 Google Maps API 生成一张带有一些标记的 map ,每个标记都有一个信息窗口。

所有必要的详细信息(纬度、经度)都打印在 HTML 中,我使用 JS 循环来获取这些值,以便创建标记和信息窗口。

map 生成得很好,但是当我单击标记时,当它应该打开信息窗口时,我收到“未捕获的类型错误:无法读取未定义的“打开”属性”

HTML:

<select>
<option class="markerobject" data-title="Headquarters" data-address="Suite 707, 2 Huntley St Alexandria NSW 2015" data-latitude="-33.911063" data-longitude="151.193590">Headquarters</option>
<option class="markerobject" data-title="Melbourne" data-address="Westfield, Carindale Ground level, Kiosk 112 Carindale QLD 4152" data-latitude="-27.505068" data-longitude="153.101718">Melbourne</option>
<option class="markerobject" data-title="Brisbane" data-address="Myer Centre Brisbane Shop 112 (Next to shaver shop) Brisbane QLD 4000" data-latitude="-27.466099" data-longitude="153.023588">Brisbane</option>
<option class="markerobject" data-title="Carindale" data-address="Westfield, Carindale Ground level, Kiosk 112 Carindale QLD 4152" data-latitude="-27.505068" data-longitude="153.101718">Carindale</option>
</select>

Javascript:

function initialize() {

var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var mapOptions = {
zoom: 4,
center: myLatlng
};
var map = new google.maps.Map(document.getElementById('allstores'), mapOptions);

var fonekingicon = document.getElementById("mappointer");
var fonekingiconsrc = fonekingicon.getAttribute("src");

var markerObjects = document.getElementsByClassName("markerobject");

var markers = [];
var infowindows = [];

for (var i = 0; i < markerObjects.length; ++i) {

infowindows[i] = new google.maps.InfoWindow({
content: markerObjects[i].getAttribute("title")
});

markers[i] = new google.maps.Marker({
position: new google.maps.LatLng(
markerObjects[i].getAttribute("data-latitude")
,
markerObjects[i].getAttribute("data-longitude")
),
map: map,
icon: fonekingiconsrc
});

google.maps.event.addListener(markers[i], 'click', function() {
infowindows[i].open(map,markers[i]);
});
}
}

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

最佳答案

您的信息窗口上没有函数闭包,请参阅 Google Maps JS API v3 - Simple Multiple Marker Example

google.maps.event.addListener(markers[i], 'click', (function(marker, i) {
return function() {
infowindows[i].open(map, markers[i]);
}
})(markers[i], i));

您的代码中也有一个拼写错误,您的markerObjects没有属性“title”,应该是“data-title”

infowindows[i] = new google.maps.InfoWindow({
content: markerObjects[i].getAttribute("data-title")
})

working fiddle

function initialize() {

var myLatlng = new google.maps.LatLng(-25.363882, 131.044922);
var mapOptions = {
zoom: 4,
center: myLatlng
};
var map = new google.maps.Map(document.getElementById('allstores'), mapOptions);

// var fonekingicon = document.getElementById("mappointer");
//var fonekingiconsrc = fonekingicon.getAttribute("src");

var markerObjects = document.getElementsByClassName("markerobject");

var markers = [];
var infowindows = [];
var bounds = new google.maps.LatLngBounds();

for (var i = 0; i < markerObjects.length; ++i) {

infowindows[i] = new google.maps.InfoWindow({
content: markerObjects[i].getAttribute("data-title")
});

markers[i] = new google.maps.Marker({
position: new google.maps.LatLng(
markerObjects[i].getAttribute("data-latitude"),
markerObjects[i].getAttribute("data-longitude")
),
map: map
// icon: fonekingiconsrc
});
google.maps.event.addListener(markers[i], 'click', (function(marker, i) {
return function() {
infowindows[i].open(map, markers[i]);
}
})(markers[i], i));
bounds.extend(markers[i].getPosition());

}
map.fitBounds(bounds);
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#allstores {
height: 500px;
width: 500px;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="allstores" style="width:750px; height:450px; border: 2px solid #3872ac;"></div>
<select>
<option class="markerobject" data-title="Headquarters" data-address="Suite 707, 2 Huntley St Alexandria NSW 2015" data-latitude="-33.911063" data-longitude="151.193590">Headquarters</option>
<option class="markerobject" data-title="Melbourne" data-address="Westfield, Carindale Ground level, Kiosk 112 Carindale QLD 4152" data-latitude="-27.505068" data-longitude="153.101718">Melbourne</option>
<option class="markerobject" data-title="Brisbane" data-address="Myer Centre Brisbane Shop 112 (Next to shaver shop) Brisbane QLD 4000" data-latitude="-27.466099" data-longitude="153.023588">Brisbane</option>
<option class="markerobject" data-title="Carindale" data-address="Westfield, Carindale Ground level, Kiosk 112 Carindale QLD 4152" data-latitude="-27.505068" data-longitude="153.101718">Carindale</option>
</select>

关于javascript - 无法读取未定义的属性 'open'。谷歌地图信息窗口循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794288/

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