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!解决了问题。谢谢!