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