2 malijiav5 malijiav5 于 2016.04.14 14:12 提问

怎么把变量传入事件函数中,求助

请问我这个代码
for(var i=0;i<markers.length;i++){
console.log(infoWindows[i]);
markers[i].addListener('click', function() {
console.log(infoWindows[i]);
infoWindows[i].open(map, this);
});
}
在第一次console的时候有值,第二次就没有了,为什么,我怎么把 infoWindows[i]的值传入事件函数中?

5个回答

showbo
showbo   Ds   Rxr 2016.04.14 14:44

做个闭包,使处理使用引用到的是当前遍历到的markers,要不最后你的i是循环后的最大值markers.length

for(var i=0;i<markers.length;i++){
    console.log(infoWindows[i]);
    markers[i].addListener('click', onClick(infoWindows[i]));
}
function onClick(value) {
    return function () {
        value.open(map, this);
    }
};
sanningjing
sanningjing   2016.04.14 14:25

请问详细一点。。。看不明白代码 

sanningjing
sanningjing   2016.04.14 14:25

请问详细一点。。。看不明白代码 

sanningjing
sanningjing   2016.04.14 14:26

请问详细一点。。。看不明白代码 

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.14 14:26

难么你定义function的时候可以给定个参数啊,分开写,类似如下代码:

for(var i=0;i<markers.length;i++){
 console.log(infoWindows[i]);
 markers[i].addListener('click', onClick(infoWindows[i])));
 }
 function onClick(value) {
 console.log(value);
 value.open(map, this);
 })
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!