创建侦听器时,是否有办法记录索引的值,以便在调用侦听器函数时使用相同的值?

时间:2018-12-20 07:20:45

标签: javascript google-maps-api-3 google-maps-markers

调用事件侦听器函数时,索引的值不再与创建侦听器时的值相同

我正在通过迭代创建所有标记及其侦听器。但是当'infowindow.open(map,marker [i]);'在迭代后被调用,“ i”具有不同的值并打开不同标记的信息窗口。如何指出要点击的标记?

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

我知道为什么会这样,但是我不确定如何解决。 'infowindow.open(map,marker [i]);'在单击标记之前,不会调用它,到那个阶段,我将拥有一个不同的值。

1 个答案:

答案 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]);
    })
}