日期:2014-05-16  浏览次数:20397 次

javascript 局部变量的传递,在自定义事件响应时的问题
         用谷歌地图API开发,在一个函数里面定义了一个循环变量,从数据库中读取了99根线并在地图上显示。打算给每根线添加一个自定义事件,鼠标左键点击该线时,该线隐藏。可是很奇怪的是,在循环里面直接对线变量定义事件,在事件响应的时候,只是针对最后一根线有效。也就是无论我点击哪根线,隐藏的都是最后一根。但如果我改成在外面写一个函数,然后将变量传给外面那个函数的时候,就可以了。什么原因?

function ReadLine()
{
   .........
   for(var i=0;i<100;i++)
   {
          ................
           var testPoly = new google.maps.Polyline(polyOptions);
           google.maps.event.addListener(testPoly, "click", function (e) {
                         testPoly.setMap(null);
                });
    }
}
-------------------------------------------
改成下面即可:
function ReadLine()
{
    for(var i=0;i<100;i++)
    {
        var testPoly2 = new google.maps.Polyline(polyOptions);
        setLine(testPoly);
    }
}
function setLine(line)
{
    google.maps.event.addListener(line, "click", function (e) {
                         line.setMap(null);
       });
}

------解决方案--------------------
尝试如下处理
 for(var i=0;i<100;i++)
   {
   var testPoly = new google.maps.Polyline(polyOptions);
   (function(tPoly){
   google.maps.event.addListener(tPoly, "click", function (e) 
   {tPoly.setMap(null);})
   })(testPoly);
}