JavaScript 数组遍历手动工作,但循环不

标签 javascript api google-maps

我将 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/

相关文章:

mysql - sql查询 map ,纬度,长距离给出不合逻辑的距离结果

javascript - 为什么我的文本框没有显示在我的 Canvas 元素上?

javascript - Cypress - 从函数设置全局变量

javascript - Google map 正在更改 map 中心

api - 如何为 Instagram 使用 Content Publishing API 而不是 Instagram 合作伙伴?

android - 如何从 json 对象数组中通过 id 获取特定对象?

android - 我当前的位置总是返回 null。我怎样才能解决这个问题?

javascript - .then() 在循环中不多次执行内部函数

javascript - 为什么 amChart 将数据居中?

api - GAE Java API channel