我在一个项目中使用谷歌地图,我想在地图上显示一些可点击的标记,每个标记都显示一个具有不同数据的Div,所以我通过从数据库获取数据并开始工作来启动我的代码好吧,然后我在地图上显示如下:
showHazardsOnMap(result);
function showHazardsOnMap(hazards) {
var imgHzr = {
url: "images/hazardPointer.png", // url
scaledSize: new google.maps.Size(60, 60), // scaled size
origin: new google.maps.Point(0, 0), // origin
anchor: new google.maps.Point(0, 0)
};
setMapOnAll(null);
for (var i = 0; i < hazards.length; i++) {
markerHzr = new google.maps.Marker({
position: { lat: hazards[i].Hazard_Lat, lng: hazards[i].Hazard_Long },
map: map,
icon: imgHzr,
animation: google.maps.Animation.DROP
});
showHazardDetails(marker, hazards[i]);
}
}
}
function showHazardDetails(mark, data) {
google.maps.event.addListener(mark, 'click', function () {
alert("clicked!!!!!!!!!!!!!!!!");
$("#hazardID").html(data.Hazard_ID);
$("#hazardImgInfo").attr("src", data.Hazard_Image);
$("#pDate").html(data.Hazard_DateTime);
$("#pDes").html(data.Hazard_Description);
$(".hazardInfo").fadeIn(1000);
});
}
好的,现在我可以看到地图上的标记,当我点击标记时,警报(“点击!!!”)工作,但它没有显示我想要看到的Div,有时它没有显示我甚至是警报。
我会附上HTML的一部分,CSS也许他们会帮助
.hazardInfo {
width: 80%;
height: 80%;
background-color: #f5821f;
z-index: 2000;
position: fixed;
top: 10%;
right: 10%;
opacity:0.9;
text-align: center;
display: none;
border: none;
border-radius: 10px;
}
<div class="hazardInfo">
<p id="hazardID"></p>
<img src="images/backbtn.png" class="backButton" /><br>
<p id="pDate" style="font-size:18px; margin-top:11%;"></p><br>
<img src="images/156.jpg" id="hazardImgInfo" style="height: 40%; width: 90%; border-radius:15px;"><br>
<p id="pDes" style="font-size:17px; margin-top:4%; margin-right:4%; width:90%;"></p><br>
<div id="thumbsUp">הוסף לרשימה</div>
</div>
答案 0 :(得分:1)
您的代码崩溃,因为在侦听器调用时,mark
和infowindow
的值已经更改。您可以尝试这样的事情(只需更改showHazardDetails
功能):
function showHazardDetails(mark, data) {
google.maps.event.addListener(mark, 'click', function () {
alert("clicked!!!!!!!!!!!!!!!!");
console.log (mark);
console.log (data);
});
}
通常情况下,mark
和data
的输出始终相同。
为了传递marker,contentString和infowindow的实际值,您必须创建IIFE。像这样,变量的值将在函数内复制:
function showHazardDetails(mark, data) {
(function (zmark, zdata) {
google.maps.event.addListener(zmark, 'click', function () {
alert("clicked!!!!!!!!!!!!!!!!");
$("#hazardID").html(zdata.Hazard_ID);
$("#hazardImgInfo").attr("src", zdata.Hazard_Image);
$("#pDate").html(zdata.Hazard_DateTime);
$("#pDes").html(zdata.Hazard_Description);
$(".hazardInfo").fadeIn(1000);
});
})(mark, data);
}
您可以查看how closures work。
如果您有任何疑问,请告诉我。