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