将该调用更改为循环中的“addListener”:
google.maps.event.addListener(markersArray[x], 'click', function() {infowindowArray[x].open(map,markersArray[x]);});
to this:
google.maps.event.addListener(markersArray[x], 'click', (function(x) {
return function() {
infowindowArray[x].open(map,markersArray[x]);
}
})(x));
通过介绍another像这样的函数,你创建了一个全新的范围。这会“冻结”您传入的“x”的值,以便返回的函数(换句话说,将传入 Google API 的实际处理函数)可以访问其自己的“x”,与在该循环中建立的所有其他处理程序。
如果你不这样做,那么所有的处理程序share完全相同的小“x”,这显然是不行的。
edit——还有其他方法可以做到这一点。你可以将这个额外的函数写成一个完全独立的东西:
function makeMapListener(window, map, markers) {
return function() { window.open(map, markers); };
}
那么循环中的语句将如下所示:
google.maps.event.addListener(markersArray[x], 'click', makeMapListener(inforwindowArray[x], map, markersArray[x]));
它的重要部分是在构造处理函数之前创建循环期间更改的变量的副本。