2017-06-20 1 views
1

Ich habe eine Google Map mit Markern. Jede Markierung zeigt nach dem Anklicken ein Infofenster an. Im Infofenster befindet sich eine Schaltfläche zum Hinzufügen von Daten zu einer Warteschlange. Beim ersten Klick auf die Schaltfläche "Hinzufügen zur Warteschlange" wird einmal ausgelöst, dann auf eine zweite Schaltfläche, die zweimal ausgelöst wird, auf eine dritte Schaltfläche und dann dreimal.Google Maps Popover klicken Ereignis wird mehrmals ausgelöst

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

HILFE! Vielen Dank :)

Antwort

0

Wenn die Schaltfläche, auf die geklickt wird, sich innerhalb der Markierung befindet, kann das Klickereignis bis zur Markierung fortgepflanzt werden, die dann der Schaltfläche ein weiteres Klickereignis hinzufügt. Daher das 1x, 2x, 3x, 4x Zündmuster.

Versuchen Sie, eine Stop-Propagation-Funktion hinzuzufügen.

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

Nö Das funktionierte auf Body-Tag nur einem Klick können Sie sich registrieren ausrücken, noch mehrmals feuern. – ryan

+0

Ich denke, Loc bellow könnte Recht haben. Verschieben Sie den Klick-Listener außerhalb der addListener-Funktion. Ich würde es auch ein bisschen schöner machen. '$ (document) .ready ($ ('. show-compare'). click (function (e) {e.preventDefault(); alert()})) .. und verschiebe das einfach außerhalb von allem –

+0

Ich kann mich nicht bewegen es draußen, weil ich Marker-Daten innerhalb des Click-Ereignisses verwende. Ich brauche Zugang zu dem Marker, auf den ich geklickt habe – ryan

0

Was Ihr Code tun ist: Jedes Mal, wenn ein Klick-Ereignis auf der Markierung ist, Ihr Code einer anderen Click-Ereignishandler auf dem Body-Tag registriert. Sie sollten es Seite die für mich

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

auf diese Weise Handler

+0

Da ich noch nicht genug Reputation habe, um sie zu kommentieren, werde ich hier ein Jsfiddle updaten, um zu demonstrieren, dass man das '$ ('body') einschalten kann (" click "," .show-compare ', function (e) 'außerhalb des Google Marker Click Listener. Hier ist der Link @ryan http://jsfiddle.net/bm1j2508/2/ Da ich zu faul bin, mache ich nur eine schnelle Lösung auf der generischen Karte, hoffe, du kannst es lesen – Loc

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

Verwandte Themen