放入数组时Javascript标记不起作用

放入数组时Javascript标记不起作用,javascript,arrays,loops,google-maps-api-3,Javascript,Arrays,Loops,Google Maps Api 3,我目前正在一个网站上工作,该网站有一个谷歌地图,上面有我的自定义标记。每个标记都有自己的链接,我可以很容易地将每个标记链接到URL,如下所示(本例中只有一个标记)- 如您所见,我只是创建一个数组,添加一个元素,然后链接该元素。这个很好用。但是,当我循环遍历每个元素以向每个元素添加侦听器时,没有一个标记有链接(它们仍然出现,并且仍然会导致鼠标更改,就好像有链接一样,但单击什么也不做)。这是代码- var image = 'parkour.png'; var locations = [

我目前正在一个网站上工作,该网站有一个谷歌地图,上面有我的自定义标记。每个标记都有自己的链接,我可以很容易地将每个标记链接到URL,如下所示(本例中只有一个标记)-

如您所见,我只是创建一个数组,添加一个元素,然后链接该元素。这个很好用。但是,当我循环遍历每个元素以向每个元素添加侦听器时,没有一个标记有链接(它们仍然出现,并且仍然会导致鼠标更改,就好像有链接一样,但单击什么也不做)。这是代码-

  var image = 'parkour.png';
  var locations = [
    new google.maps.Marker({
      position: new google.maps.LatLng(43.670231, -79.386821),
      map: map,
      url: "http://bit.ly/RDYwKQ",
      icon: image
    })
  ]
  for(x in locations) {
    google.maps.event.addListener(x, 'click', function() {
        window.location.href = x.url;
    })
  }
请注意,唯一的变化是元素以这种方式循环和调用

我尝试了一切,从将其更改为普通for循环,到先创建一个标记,然后将其添加到数组中,但似乎找不到任何修复方法


有什么建议吗?

您不应该使用
for in
语句在数组上循环。for in语句迭代对象的所有键并生成该键。要在数组上循环,请改用简单的
for
循环

另外,作为一种好的实践,您应该有一个
var
语句,并尽可能地限制属性查找。此外,必须小心使用闭包:

var i=0,
len=位置。长度,
addListener=google.maps.event.addListener,
L
对于(;i
如OP中所述,我已经尝试过这个方法,但没有找到任何解决方案。你还有别的想法吗?我现在已经准备好做任何事了;有没有可能你知道为什么这样做有效,而我的不行?@Simon,看看我发布的关于闭包的链接;)javascript函数闭包。
  var image = 'parkour.png';
  var locations = [
    new google.maps.Marker({
      position: new google.maps.LatLng(43.670231, -79.386821),
      map: map,
      url: "http://bit.ly/RDYwKQ",
      icon: image
    })
  ]
  for(x in locations) {
    google.maps.event.addListener(x, 'click', function() {
        window.location.href = x.url;
    })
  }
var i = 0,
    len = locations.length,
    addListener = google.maps.event.addListener,
    l;

    for(; i < len; i++) {
        addListener((l = locations[i]), 'click', (function(l) {
            return function () {
                window.location.href = l.url;
            };

        })(l));
     }