将for循环中的值传递给事件侦听器 - Javascript

时间:2012-09-24 10:35:27

标签: javascript google-maps javascript-events

  

可能重复:
  Looping through Markers with Google Maps API v3 Problem

我有一个循环,我从数组元素中提取一些数据,然后为每次迭代添加一个事件监听器。但我需要将这些值传递给每个关联的侦听器,但最终我只在侦听器中只有最后一个数组项值。我试图从"this"理解,但解决方案似乎不适合我的情况而且我很困惑。这是我的代码:

for(var i=0;i<route.length;i++)
{
  var input= route[i];
  var sdata= input.split("@",19)
  //Some code
  google.maps.event.addListener(marker,'click',showiwindow);
}

function showiwindow(event)
{
  var input= event.latLng;
  //some code 
  ...
  document.getElementById('<%= lbl1.ClientID %>').innerHTML = sdata[1];
  document.getElementById('<%= lbl2.ClientID %>').innerHTML = sdata[2];
  document.getElementById('<%= lbl3.ClientID %>').innerHTML = sdata[3];
  document.getElementById('<%= lbl4.ClientID %>').innerHTML = sdata[4];     
  ......
}    

当我点击标记时,我只获得最后一次迭代的值。回到该链接中的解决方案,如何将数组与i的迭代值一起传递。请参考我的意思链接。

2 个答案:

答案 0 :(得分:4)

这样的事情怎么样?

for(var i=0;i<route.length;i++)
{
  var input= route[i];
  var sdata= input.split("@",19)
  //Some code
  showiwindow(sdata);
}

function showiwindow(sdata)
{
  google.maps.event.addListener(marker,'click', function(event) {
    var input= event.latLng;
    //some code 
    ...
    document.getElementById('<%= lbl1.ClientID %>').innerHTML = sdata[1];
    document.getElementById('<%= lbl2.ClientID %>').innerHTML = sdata[2];
    document.getElementById('<%= lbl3.ClientID %>').innerHTML = sdata[3];
    document.getElementById('<%= lbl4.ClientID %>').innerHTML = sdata[4];     
    ......
  });
}    

答案 1 :(得分:0)

感谢大家提供的各种链接。最后清楚地了解了如何处理它:

for(var i=0;i<route.length;i++)
{
  var input= route[i];
  var sdata= input.split("@",19)
  //Some code
  google.maps.event.addListener(marker,'click',showiwindow(sdata));
}

function showiwindow(rdata)
{
  return function(){
  .....//some code
  document.getElementById('<%= lbl4.ClientID %>').innerHTML =rdata[4];
  .....
  };
}