2017-06-20 107 views
1

我有一個帶有標記的谷歌地圖。點擊時每個標記顯示一個infowindow。 infowindow內部是一個按鈕,用於將一些數據添加到隊列中。在第一次點擊添加到隊列按鈕時,它會觸發一次,點擊第二個按鈕它會觸發兩次,點擊第三個按鈕,然後觸發三次,依此類推。谷歌地圖Popover點擊事件多次觸發

google.maps.event.addListener(marker, 'click', (function(marker, i) { 
    return function() { 
     $('.show-compare').popover('destroy'); 
     infowindow.setContent('<div class="add-wrapper"><div class="show-compare" data-toggle="popover" data-placement="top" data-content="Add to compare basket">CLICK ME</div></div>); 
     infowindow.setOptions({maxWidth: 200}); 
     infowindow.open(map, marker); 

     $('body').on("click", '.show-compare', function(e) { 
       e.preventDefault(); 
       alert();//this fires x times, only should fire once per click!! 

     } 
    }) (marker, i)); 
} 

幫助!謝謝:)

回答

0

如果被點擊的按鈕位於標記內部,點擊事件可能會傳播到標記,然後再向該按鈕添加另一個單擊事件。因此,1x,2x,3x,4x點火模式。

嘗試添加停止傳播功能。

$('body').on("click", '.show-compare', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    alert(); 
} 
+0

沒了,還在射擊多次。 – ryan

+0

我認爲Loc波紋管可能是正確的。將addListener函數外部的click監聽器移動。我會讓它更好一點。 $(document.ready)($('。show-compare')。click(function(e){e.preventDefault(); alert()}))'..並且把它移到一切之外 –

+0

我不能移動它在外面,因爲即時通訊在點擊事件中使用標記數據。我需要訪問我點擊的標記 – ryan

0

你的代碼做的是:每一個上有標記click事件的時候,你的代碼將註冊在身上的標籤再點擊一下事件處理程序。你應該將其移出側

google.maps.event.addListener(marker, 'click', (function(marker, i)

這樣,你註冊只有一個body標籤單擊處理

+0

因爲我沒有足夠的聲望評論,我會在這裏更新一個jsfiddle來證明你可以移動'$('body')。on(「click」,' .show-compare',函數(e)'在google標記點擊監聽器之外。 這裏是鏈接@ryan http://jsfiddle.net/bm1j2508/2/。因爲我太懶惰我只是做一個快速修復在通用地圖上,希望你能閱讀它 – Loc

0
$('body').off("click", '.show-compare').one("click", '.show-compare', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    alert(); 
} 

這爲我工作