肿么又被循环难住了呢?解决方案
肿么又被循环难住了呢?
请问这段最后两句有什么问题么?为什么markers显示正常,但是所有读出的info都是最后一个?
------解决方案--------------------
mapObj.bind(markers[i],"click",(function(_i){
return function(e){infoWindows[_i].open(mapObj,e.lnglat)}
})(i));
------解决方案--------------------
这不是什么JQUERY写法。
就是个闭包啦。。
2L是正解。
说白点就是编译期跟运行期的区别,你可以分析一下你的代码,逻辑上看起来是没问题的,每个绑定一个对应的i,但是真正到了运行期,函数还是去取i的值,这个时候i已经是最后那个值了,所以就形成了这样的情况
用立即执行的函数
------解决方案--------------------
1#的就是js的方法,做了个闭包,要不你只能获取最后的信息
请问这段最后两句有什么问题么?为什么markers显示正常,但是所有读出的info都是最后一个?
for(var i in mapx){
markers.push(new MMap.Marker({id:"n7h9"+[i],position:new MMap.LngLat(mapx[i],mapy[i]),icon:icon}))//自定义构造MMap.Marker对象
mapObj.addOverlays(markers[i]);
infoWindows.push(new MMap.InfoWindow({content:minfo[i]}));
mapObj.bind(markers[i],"click",function(e){infoWindows[i].open(mapObj,e.lnglat)});
}
------解决方案--------------------
mapObj.bind(markers[i],"click",(function(_i){
return function(e){infoWindows[_i].open(mapObj,e.lnglat)}
})(i));
------解决方案--------------------
这不是什么JQUERY写法。
就是个闭包啦。。
2L是正解。
说白点就是编译期跟运行期的区别,你可以分析一下你的代码,逻辑上看起来是没问题的,每个绑定一个对应的i,但是真正到了运行期,函数还是去取i的值,这个时候i已经是最后那个值了,所以就形成了这样的情况
用立即执行的函数
(function(_i){执行以下的话,return的是一个新函数,这个函数里的_i就是每次的i,这样每次绑定的函数都是对应的i。
return function(e){infoWindows[_i].open(mapObj,e.lnglat)}
})(i)
------解决方案--------------------
1#的就是js的方法,做了个闭包,要不你只能获取最后的信息