Javascript 将侦听器添加到标记不会';我不能循环工作

Javascript 将侦听器添加到标记不会';我不能循环工作,javascript,google-maps,Javascript,Google Maps,我正在尝试将侦听器添加到循环中的标记,但它不起作用 当分别添加它们时,它会起作用。像这样: google.maps.event.addListener(markersArr[0], 'click', function() { infoWindowArr[0].disableAutoPan=true; infoWindowArr[0].open(map,markersArr[0]); }); google.maps.event.addLis

我正在尝试将侦听器添加到循环中的标记,但它不起作用

当分别添加它们时,它会起作用。像这样:

    google.maps.event.addListener(markersArr[0], 'click', function() {
        infoWindowArr[0].disableAutoPan=true;
        infoWindowArr[0].open(map,markersArr[0]);
    });

    google.maps.event.addListener(markersArr[1], 'click', function() {
        infoWindowArr[1].disableAutoPan=true;
        infoWindowArr[1].open(map,markersArr[1]);
    });
但是当添加到循环中时,单击标记不会弹出信息窗口

        for (var u=0; u<2; u++){
             google.maps.event.addListener(markersArr[u], 'click', function() {
             infoWindowArr[u].disableAutoPan=true;
             infoWindowArr[u].open(map,markersArr[u]);
        });

for(var u=0;u您的问题是侦听器函数引用在外部范围中定义的
u
变量,并在函数外部进行更改,即在侦听器运行时,它将看到
u==2
,因为循环已经完成

您可以将侦听器包装到另一个闭包中:

function makeListener(index) {
    return function() {
        infoWindowArr[index].disableAutoPan=true;
        infoWindowArr[index].open(map,markersArr[index]);
    }
}

for (var u=0; u<2; u++){
    google.maps.event.addListener(markersArr[u], 'click', makeListener(u));
}
函数makeListener(索引){
返回函数(){
infoWindowArr[index].disableAutoPan=true;
infoWindowArr[index].open(映射,markersArr[index]);
}
}
对于(var u=0;uI),它看起来是这样的。它比创建一个边函数更紧凑,但可读性较差

    for (var u=0; u<2; u++){
      (function(u) {
         google.maps.event.addListener(markersArr[u], 'click', function() {
           infoWindowArr[u].disableAutoPan=true;
           infoWindowArr[u].open(map,markersArr[u]);
         });
      })(u);
    }

for(var u=0;uGreat!解决了问题。谢谢!