Javascript:循环遍历数组以创建侦听器,通过引用和值调用发出问题
Javascript: Looping through an array to create listeners, issue with call by reference and value?
for (var i=0; i<layerCount; i++){
for (var j=0; j<layerData[i].data.length; j++){
var text = layerData[i].data[j].text;
var latlng = new google.maps.LatLng(layerData[i].data[j].lat, layerData[i].data[j].lng);
var marker = new google.maps.Marker({map: map, position: latlng});
var infowindow = new google.maps.InfoWindow({content: text});
google.maps.event.addListener(marker, 'click', function() {infowindow.open(map,marker);});
}
}
上面代码中的问题很可能出在以 google.maps.event.addListener
开头的行中。无论我单击哪个标记,我都会为layerdata[i].data[j]
数据字段中的最后一项打开一个信息窗口。似乎我是通过引用而不是按值调用的,因此所有侦听器的infowindow
和marker
是数组中的最后一项。
但是我该如何解决这个问题呢?
非常感谢!
你必须创建一个闭包:
for (var i=0; i<layerCount; i++){
for (var j=0; j<layerData[i].data.length; j++){
var text = layerData[i].data[j].text;
var latlng = new google.maps.LatLng(layerData[i].data[j].lat, layerData[i].data[j].lng);
var marker = new google.maps.Marker({map: map, position: latlng});
var infowindow = new google.maps.InfoWindow({content: text});
bindOpenWindow(infowindow, map, marker);
}
}
function bindOpenWindow(infowindow, map, marker)
{
google.maps.event.addListener(marker, 'click', function() {infowindow.open(map, marker);});
}
看看它是否有助于;)
JavaScript没有
块作用域的概念,只有函数和全局作用域。您可以使用闭包来解决它:
for (var i = 0; i < layerCount; i++){
for (var j = 0; j < layerData[i].data.length; j++){
var text = layerData[i].data[j].text;
var latlng = new google.maps.LatLng(layerData[i].data[j].lat, layerData[i].data[j].lng);
var marker = new google.maps.Marker({map: map, position: latlng});
var infowindow = new google.maps.InfoWindow({content: text});
google.maps.event.addListener(marker, 'click', (function(infowindow, marker) {
return function() {infowindow.open(map, marker);};
})(infowindow, marker));
}
}
相关文章:
- 如何将属性值调用到 javascript
- 在循环中获取值,发送到另一个页面并使用该值调用catch数据
- Is Javascript绑定由值调用
- JavaScript中通过引用/值传递的内容
- getDetails中引用值错误-谷歌位置搜索
- 猫鼬JS预保存钩子与引用值
- 如何将输入值与对象文本中的引用值进行比较
- 按变量的值调用函数并保持此指针的作用域
- Javascript 多值调用
- 如何通过在javascript中引用来调用变量
- 使用未定义的值调用 javascript 函数
- 如何从 hhtm 中的表单属性值调用 javascript 函数
- 如何在jQuery中通过字符串值调用变量
- 带有 2 个按钮的表单需要根据值调用不同的函数
- Javascript 函数返回 value.根据第一个函数返回值调用另一个函数
- 在 JavaScript 中通过引用传递(调用方法)
- 基于单选按钮检查值调用Javascript函数
- 用另一个函数的值调用一个函数
- Javascript:循环遍历数组以创建侦听器,通过引用和值调用发出问题
- 将按引用调用作为按值调用传递