作者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