调用事件侦听器函数时,索引的值不再与创建侦听器时的值相同
我正在通过迭代创建所有标记及其侦听器。但是当'infowindow.open(map,marker [i]);'在迭代后被调用,“ i”具有不同的值并打开不同标记的信息窗口。如何指出要点击的标记?
google.maps.event.addListener(marker[i], 'click', function(){
infowindow.open(map, marker[i]);
}
我知道为什么会这样,但是我不确定如何解决。 'infowindow.open(map,marker [i]);'在单击标记之前,不会调用它,到那个阶段,我将拥有一个不同的值。
答案 0 :(得分:1)
之所以发生这种情况,是因为调用回调时修改了 i 值
尝试下面的代码段
(function(local_i){
google.maps.event.addListener(marker[local_i], 'click', function(){
infowindow.open(map, marker[local_i]);
})(i);
这是javascript中的经典问题,可以通过了解javascript中的闭包来解决。
编辑: 如果您正在编写ES6 JavaScript 并在该函数调用的外部包含一个for循环 您还可以像这样修改代码段 因为 let 会在每次循环运行时进行初始化
for(let i = 0; i < something.length; i++){
google.maps.event.addListener(marker[i], 'click', function(){
infowindow.open(map, marker[i]);
})
}