将侦听器添加到标记在循环中不起作用
Adding listeners to markers doesn't work in a loop
我正在尝试将侦听器添加到循环中的标记,但它不起作用。
单独添加它们时,它可以工作。喜欢这个:
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]);
});
谁能解释一下如何让它在循环中工作?
您的问题是侦听器函数引用在外部作用域中定义的 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));
}
我也有同样的情况,工程师用匿名函数包装器回答。它看起来像这样。它比创建副功能更紧凑,但可读性较差。
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);
}
相关文章:
- 我的javascript for循环不起作用
- javascript for循环不起作用
- 为什么我的While循环不起作用
- JS(node.js)而循环不起作用
- JavaScript 数组/循环不起作用
- Javascript if-else循环不起作用
- 为什么jquery循环不起作用
- JSON 循环不起作用
- 带有本地存储变量的 jQuery 循环不起作用
- 虽然循环不起作用,但只有JavaScript
- 虽然循环不起作用(在其他类似问题中找不到答案)
- 第一个循环不起作用
- jsbin for 循环不起作用 意外的令牌错误
- 为什么循环不起作用
- JQuery ForEeach 循环不起作用
- JavaScript 游戏循环不起作用
- 因为让循环不起作用
- imacros 循环不起作用
- PHP for each 循环不起作用
- JavaScript 确认 PHP 中的弹出窗口,而循环不起作用