javascript 局部变量的传递,在自定义事件响应时的问题

tossgoon 2014-03-21 05:44:54
用谷歌地图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);
});
}
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
注册事件 但是并没有马上执行,当事件触发的时候 再次访问testPoly,循环已经完毕,此时testPoly已然是最后一个,那么你需要自执行函数 一开始就运行并把 当前值作为参数传递给事件,其实本意和定义一个函数传参也是无异,一样的道理.
tossgoon 2014-03-24
  • 打赏
  • 举报
回复
我原来那种写法错在哪儿了?
tossgoon 2014-03-24
  • 打赏
  • 举报
回复
引用 1 楼 Return_false 的回复:
尝试如下处理
 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);
				}
这样处理果然可以了。大神给稍微解释一下下呗
blackchef 2014-03-22
  • 打赏
  • 举报
回复
目测闭包问题
  • 打赏
  • 举报
回复
尝试如下处理
 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);
				}

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧