Click-Ereignis in Google Map Infofenster nicht gefangen
-
19-09-2019 - |
Frage
Mit Google Map v2, ich möchte in der Lage sein, eine Funktion auszulösen, wenn ein Text in dem Infofenster eines GMarker klicken.
$(".foo").click(myFunction);
...
marker.openInfoWindowHtml("<span class=\"foo\">myText</span>");
funktioniert nicht. Warum wird das Ereignis nicht in der Infowindow gefangen?
Lösung
Wenn die Ereignisbindung Anruf vor dem Aufruf von openInfoWindowHtml genannt wird, wie es in Ihrem Beispiel ist, war die Spanne nicht im DOM während der erste Anruf für Elemente mit der Klasse der Suche wurde „foo“, so wurde kein Handler angebracht .
Sie können entweder die Event-Handler bewegen, um nach openInfoWindowHtml aufgerufen werden, oder „live“ Ereignis-Bindung verwenden, so dass jQuery das DOM für alle neue Elemente mit dem angegebenen Selektor überwachen.
$(".foo").live('click', myFunction);
Andere Tipps
Ich konnte nicht es bekommen arbeiten wie Kevin Gorski erklärt ...
mit jQuery 1.9.1 und Karten api v = 3.exp folgenden Arbeiten:
infowindow.setContent('<a href="#" id="test">test</a>');
google.maps.event.addDomListener(infowindow, 'domready', function() {
$('#test').click(function() {
alert("Hello World");
});
});
Soweit ich weiß, spritzt GMaps Inhalt in das Infofenster programmatisch, so dass alle gebundenen Event-Handler auf den injizierten Elemente wird nicht ausgelöst, wenn Sie Ereignis Delegation verwenden:
$(".foo").live("click", myFunction);
Siehe live
Ereignishandler.
Versuchen Sie folgendes:
google.maps.event.addListener(infowindow,"**domready**",function() {
var Cancel = document.getElementById("Cancel");
var Ok = document.getElementById("Ok");
google.maps.event.addDomListener(Cancel,"click",function() {
infowindow.close();
});
google.maps.event.addDomListener(Ok,"click",function() {
infowindow.close();
console.log(position);
codeLatLng(position);
});
});
einfache Lösung und die Arbeit für mich. verwenden Onclick-Ereignis in Spanne.
<span class=\"foo\" onclick="test()">myText</span>
function test(){
alert('test OK');
}