作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我循环并放置了一些标记,但是当我点击一个标记时,它们都以相同的值响应
这是我的代码
for(a=0; a < prod.length; a++){
// we add marker to map
var myLatlng = new google.maps.LatLng(prod[a]['lat'],prod[a]['lon']);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: prod[a]['name']+" \n"+prod[a]['description'],
icon: image
});
google.maps.event.addListener(marker, "click", function() {
show_details(a);
});
}
函数 show_details,a 始终具有相同的值
我看过这里的其他答案,但这并没有解决我的问题。
最佳答案
异步编程/脚本中的典型问题。 a
变量传递,当点击事件运行时,因此,它的值是 for
循环完成后的值。您应该创建一个内部函数范围,并将 a
的值保存在一个变量中,该变量仅存在于该范围内。解决方案:
(function(z){
google.maps.event.addListener(marker, "click", function() {
show_details(z);
});
})(a);
a
变量也在回调函数之外。因此,如果您修改 a
的值(或 for
循环修改它),并且在调用事件处理程序时,它会看到修改后的 a
.
帮助链接:http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/ .
关于javascript - 谷歌地图多个标记clickevent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15834953/
leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档: https://leafletjs.cn/reference.html 官网(英文): ht
我是一名优秀的程序员,十分优秀!