我将 google maps 标记放入数组中,当我手动执行时一切正常:
var m =[];
m[0] = new google.maps.Marker(.....
google.maps.event.addListener(m[0], 'click', function()
{
alert('Markerklik');
$("#trasa").append(m[0].getPosition().toString()+"<br>");
});
m[1] = new google.maps.Marker( .....
google.maps.event.addListener(m[1], 'click', function()
{
alert('Markerklik');
$("#trasa").append(m[1].getPosition().toString()+"<br>");
});
但是如果我想用 for 循环:
for ( var i=0 ; i<2; i++ )
{
// do the same with m[i]
}
单击标记 (m[i].getPosition()) 时,我得到 m[i] is undefined。
关于如何使用循环自动完成的任何建议?
请注意,如果我将标记放入变量 temp,请将监听器添加到 temp 并执行 m.push(temp);在循环中 - 单击任何标记给我最后添加的标记的位置。
这看起来像向 m[i] 添加事件甚至不检查 i 的值,例如它不是在寻找 m[1],而是像变量“named”之类的东西 m[i]
如果我用 m[0] 和 m[1] 手动完成所有代码 - 一切正常,有事件连接到 m[0] 和 m[1],但是用 m[i 的 for 循环创建标记] 看起来像绑定(bind)事件不绑定(bind)到 m[0] 并且在一个循环 m[1] 之后,但是当 i 只是字母 i 而不是 i< 的值时将事件添加到“m[i]”/p>
好的,看起来响应中的这段代码有效:
for (var i=0 ; i<2; i++ )
{
(function(x) {
m[x] = new google.maps.Marker( {
position: getRandomPoint(),
title: 'Mojmarkers'
});
google.maps.event.addListener(m[x], 'click', function() {
alert('Markerklik');
$("#trasa").append(m[x].getPosition().toString()+"<br>");
});
return m[x];
})(i);
}
谁能解释为什么这个不寻常的解决方案能按我的意愿工作?
最佳答案
你可以试试下面这段代码,它可能是闭包内存问题。
for (var i=0 ; i<2; i++ ) {
(function(i) {
m[x] = new google.maps.Marker(.... ;
return google.maps.event.addListener(m[x], 'click', function() {
alert('Markerklik');
$("#trasa").append(m[x].getPosition().toString()+"<br>");
});
})(x);
}
关于JavaScript 数组遍历手动工作,但循环不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3726186/