作者sk1765 (鼎玉铉)
看板Ajax
标题Re: [问题] google map event 听不到事件?
时间Fri Jan 6 10:07:25 2012
※ 引述《timmy852111 (光⊙﹏⊙)》之铭言:
: 简单说一下0.0
: 就是 有很多的marker 每个marker搭配一个infowindow 加上一个event
: 但是好像event好像听不到或是找不到要搭配哪个infowindow囧
: 程式码如下
: function gettestlatlngMarkers(n) {
: var marker = [];
: var image = './16px/xxx.png';
: for (var i = 0; i < n.length; ++i) {
: var tempLatlng = new google.maps.LatLng(
: n[i]['pointlat'], n[i]['pointlng']);
: var contentString = '123';
: var markers = new google.maps.Marker({
: position: tempLatlng,
: title: n[i]['name'],
: icon: image
: });
: infowindow = new google.maps.InfoWindow({
: content: contentString,
: size: new google.maps.Size(200,200)
: });
: google.maps.event.addListener(markers, 'click', function() {
: if (infowindow) infowindow.close();
: infowindow.open(map, markers);
//<<<这段infowindow 写在匿名函是里形成一个closure
: });
: marker.push(markers);
: );
: }
: return marker;
: }
: 就我的理解应该是把marker push到阵列里面
: 但是infowindow跟event好像没有跟上
: 请问要怎麽改呢>"<
这个问题出在你的匿名函式那一段
google.maps.event.addListener(markers, 'click', function() {
if (infowindow) infowindow.close();
infowindow.open(map, markers);
});
匿名含式那一段用的infowindow 参考到放在函式外的infowindow 形成一个closure
那麽当然click event发生时 for loop已经跑了好几次
infowindow = new google.maps.InfoWindow({
content: contentString,
size: new google.maps.Size(200,200)
});
每次都塞新的google.maps.InfoWindow 物件给infowindow
当然click的时候 infowindow中的物件是最後一次new的物件罗
要怎麽解决呢
我不晓的为什麽要把indowindow宣告写在匿名函式外是否有特殊需求
如果写在里面会不会好一点
google.maps.event.addListener(markers, 'click', function() {
var infowindow = new google.maps.InfoWindow({
content: contentString,
size: new google.maps.Size(200,200)
});
if (infowindow) infowindow.close();
infowindow.open(map, markers);
});
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 175.181.127.60