代码之家  ›  专栏  ›  技术社区  ›  Piotr Müller

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

  •  1
  • Piotr Müller  · 技术社区  · 15 年前

    我将谷歌地图标记放入数组中,当我手动操作时,一切正常:

    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 ( var i=0 ; i<2; i++ )
    {
    // do the same with m[i]
    }
    

    m[i]未定义 单击标记时(m[i].getPosition())。

    有没有关于如何使用loop自动执行的建议?

    请注意,如果我将marker放入变量temp中,请将listener添加到temp中,并执行m.push(temp);在循环中,单击给出最后添加的标记位置的任何标记。

    这看起来像是向m[i]添加一个事件,它甚至不检查i的值,例如,它不查找m[1],而是类似于变量“named” 米[i]

    如果我手动使用m[0]和m[1]编写所有代码,那么一切都正常,有一些事件连接到m[0]和m[1],但是使用m[i]创建for循环的标记看起来像是绑定事件,而不是绑定到m[0]和一个循环m[1]之后,而是在我只是一个字母时将事件添加到“m[i]”

    好的,看起来这个代码从一个响应工作 :

    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);
      }
    

    4 回复  |  直到 15 年前
        1
  •  2
  •   Q_Mlilo    15 年前

    你可以试试下面的代码,它可能是一个内存问题。

    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);
    }
    
        2
  •  1
  •   Tim    15 年前

        3
  •  0
  •   Daniel A. White    15 年前

    尝试删除 var 从你的 for

        4
  •  0
  •   Sachin Shanbhag    15 年前

    尝试使用

    m.push(new google.maps.marker...);