javascript – Google Maps API v3:将值传递给Listener函数(),以便在单击标记时创建一个圆圈?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Google Maps API v3:将值传递给Listener函数(),以便在单击标记时创建一个圆圈?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1621字,纯文字阅读大概需要3分钟。
内容图文
![javascript – Google Maps API v3:将值传递给Listener函数(),以便在单击标记时创建一个圆圈?](/upload/InfoBanner/zyjiaocheng/755/9752f3ad9e3e4d6d96b9505cffed5bae.jpg)
我想在点击标记时围绕标记形成一个圆圈!
因此,监听器被添加到标记中,并且该功能需要作用于圆圈.
这是我的代码:
for(var j=0;j<lat.length;j++)
{
var pos = new google.maps.LatLng(lat[j],lng[j]);
var marker_options = {position: pos, map:map, draggable:false};
marker[j] = new google.maps.Marker(marker_options);
circle_option = {strokeColor:"#FF0000",strokeOpacity:0.8,strokeWeight:2,fillColor:"#FF0000",fillOpacity:0.35,map:null,center:pos,radius:500};
circle[j] = new google.maps.Circle(circle_option);
google.maps.event.addListener(marker[j], 'click', function() {circle[j].setMap(map);}); // Error : circle[j] is undefined
}
错误:circle [j]未定义? (在event.addListener行上!)
为什么……应该在那里定义?
怎么做才是正确的方法?请帮忙 !!
解决方法:
你有一个j的闭包问题.调用函数时,j将引用j在for循环中的最后一个值.因此,j将是lat.length,它大于圆的大小.解决方案是在生成回调函数时强制j进行求值:
function make_callback(circle, map) {
return function() {
circle.setMap(map);
};
}
然后,在你的循环中:
google.maps.event.addListener(marker[j], 'click', make_callback(circle[j], map));
将回调生成包装在单独的函数中将在调用make_callback时提供circle [j]的值,而不是调用回调时的值.
j是对值的引用,它指向的值取决于您询问j的值是什么.绑定像这样的函数时:
google.maps.event.addListener(marker[j], 'click', function() { something(j); });
在调用函数之前,匿名函数不询问j它的值是什么,函数只记得它将使用j.当回调函数执行时,它会询问j的当前值并使用它.这意味着两件事:
>您在该循环中绑定的所有回调将使用相同的j值.
> j将是lat.length,因为它是循环期间j分配的最后一个值.
通过使用make_callback函数来构建回调,我们在绑定回调时询问j的值.这只是强制j在具有我们想要的值时被评估的标准技巧.
内容总结
以上是互联网集市为您收集整理的javascript – Google Maps API v3:将值传递给Listener函数(),以便在单击标记时创建一个圆圈?全部内容,希望文章能够帮你解决javascript – Google Maps API v3:将值传递给Listener函数(),以便在单击标记时创建一个圆圈?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。