Re: [問題] google map event 聽不到事件?

看板Ajax作者 (鼎玉鉉)時間14年前 (2012/01/06 10:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
※ 引述《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
文章代碼(AID): #1F1bTWgn (Ajax)
文章代碼(AID): #1F1bTWgn (Ajax)