2017-06-20 13 views
1

私はマーカー付きのGoogleマップを持っています。クリックされると、各マーカーは情報ウィンドウを表示します。 infowindowの中には、いくつかのデータをキューに追加するためのボタンがあります。 [キューに追加]ボタンの最初のクリックでは、一度起動し、2回目のボタンをクリックして2回、3回目をクリックして3回起動します。GoogleマップPopover clickイベントが複数回発生する

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)); 
} 

HELP!ありがとうございました:)

答えて

0

クリックされたボタンがマーカの内側にある場合、クリックイベントはマーカまで伝播しており、ボタンに別のクリックイベントが追加されます。したがって、1x、2x、3x、4xの発火パターン。

ストップ伝播機能を追加してみてください。

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

ハズレのために働いを登録

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

そのようにサイドをそれを移動する必要があります。 – ryan

+0

私はLocベローが正しいかもしれないと思います。クリックリスナーをaddListener関数の外に移動します。私はそれも少し上手くしています。 '.. $(document).ready($( '。show-compare'))をクリックすると、すべて外に移動します。 –

+0

私は移動できませんそれは、クリックイベント内でマーカーデータを使用しているためです。私はクリックしたマーカにアクセスする必要があります – ryan

0

マーカーでクリックイベントが発生するたびに、コードでbodyタグに別のクリックイベントハンドラが登録されます。あなたはbodyタグにのみワンクリックハンドラ

+0

まだコメントするには十分な評判がないので、ここでjsfiddleを更新して '$( 'body')を動かせることを示しますon(" click "、" .show-compare '、function(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(); 
} 

これはまだ複数回発射、私

関連する問題