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



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

的值相同

我正在通过迭代创建所有标记及其听众。但是,当'infoWindow.open(map,marker [i]);'在迭代后被调用,"我"具有不同的价值,并打开了不同的标记的infowdow。我该如何指出要单击的标记?

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

我明白了为什么会发生这种情况,但我不确定如何解决。'InfowIndow.open(Map,Marker [i]);'直到单击标记,就不会调用。

这是因为 i 值在调用

时会修改值

尝试Bellow片段

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

这是JavaScript中的一个经典问题,可以通过理解JavaScript中的封闭来解决。

编辑:如果您正在写ES6 JavaScript并在该功能调用外包含一个用于循环的循环您也可以像这样修改摘要因为 Let 每次循环运行

初始化
for(let i = 0; i < something.length; i++){    
    google.maps.event.addListener(marker[i], 'click', function(){
      infowindow.open(map, marker[i]);
    })
}

相关内容