2013-03-22 89 views
4

我使用標記和infowindows創建Google地圖。我希望每個infowindow都有一個縮放按鈕,可以讓Google地圖放大並居中放置相應的標記。導致點擊事件觸發兩次的圖像?

查看此jsfiddle爲例。 infowindow的代碼相對簡單:

infoWindowArray[i] = new google.maps.InfoWindow({ 
    position: latlng, 
    content: "<a href='/"+pitches[i].slug+".html'>"+pitches[i].name + " ("+ pitches[i].club+")</a><br /><img width='16' alt='Loupe' src='//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Loupe.svg/32px-Loupe.svg.png'/> <a id='zoom_"+pitches[i].id+"' href='javascript:void(0)'>Zoom In</a>" 
}); 

但是,我的腳本在Chrome中非常氣質,在Firefox中它總是失敗。原因是因爲一個點擊是以某種方式被解僱兩次。所以這個功能:

function setupZoomListeners(object, title, google_position, map){ 
    google.maps.event.addListener(object, 'domready', function() { 
     google.maps.event.addDomListener(document.getElementById("zoom_"+title), 'click', function(){ 

      if (document.getElementById("zoom_"+title).innerHTML == "Zoom In"){ 
       map.setCenter(google_position); 
       map.setZoom(14); 
       document.getElementById("zoom_"+title).innerHTML = "Zoom out"; 
      } else { 
       map.setCenter(new google.maps.LatLng(53.5, -2.2)); 
       map.setZoom(6); 
       document.getElementById("zoom_"+title).innerHTML = "Zoom In"; 
      } 


     }); 
} 

是放大和縮小,因爲它聽到兩個點擊,所以淨效果是什麼。 但是,只是刪除infowindow中的img標籤似乎可以解決所有問題。

爲什麼img標籤的存在會導致腳本將一次點擊解釋爲兩個,是否有任何地上的理由?我見過很多點擊註冊過多的情況 - 通常會導致這種情況?

任何人都可以建議如何解決這個問題嗎?謝謝。

回答

1

它捕獲你的domready事件兩次(至少在我的版本的firefox 19.0.2)。你可以看到,如果你開始你的zoomListeners功能,像這樣:

function setupZoomListeners(object, title, google_position, map){ 
    console.log('zoomListener'); 
    google.maps.event.addListener(object, 'domready', function() { 
     console.log('domReady'); 
     google.maps.event.addDomListener(... 

我不認爲domready中是一個很好的事件,在這裏使用。就個人而言,我只會使用一個infoWindow對象,並在點擊標記時使用不同的HTML填充。

在任何情況下,domready並不打算用於dom的子集,因爲您正在這樣做。我相信每次更改標記時都會觸發它。因此,當開始document.getElementById("zoom_"+title).innerHTML = ...的行被執行時,已準備好事件將再次觸發。