Google Maps - load-Fenster auf den marker klicken
Ich versuche zu erstellen, die eine Google Map mit mehreren Markern auf, dass Lasten eine Warnung, wenn ein marker angeklickt wird.
var map = null;
function setupMap() {
map = new GMap2(document.getElementById("map"));
map.setUIToDefault();
map.setCenter(new GLatLng( 0, 0 ), 1);
map.enableDoubleClickZoom();
//Create the marker icon - will be repeated for each icon but
//truncated for brevity in example
var icon1 = new GIcon(G_DEFAULT_ICON);
icon1.image = "uploads/1.jpg";
icon1.shadow = "";
icon1.iconSize = new GSize( 50, 50 );
var latlng = new GLatLng( 0, 0 );
markerOptions = { icon:icon1 };
marker1 = new GMarker( latlng, markerOptions );
map.addOverlay( marker1 );
GEvent.addListener( marker1, "click", loadInfo(1) );
}
function loadInfo( a ) {
alert( a );
}
window.onload = setupMap;
In dem Beispiel arbeiten, werde ich gehen das marker-Objekt zu loadInfo() und dann laden Sie ein Infofenster, aber für jetzt, ich versuche nur, die Aktion zu geschehen, wenn der marker angeklickt wird. Was tatsächlich geschieht, ist, dass eine alert-box geladen wird (mit der '1' in der es, wie erwartet), wenn die Karte lädt. Mehrere Marker nicht laden mehrere alert-Boxen, und nach dem ersten alert-box geladen hat (was ich nicht will) Sie klicken auf den Marker nicht tun.
Jede Hilfe ist sehr willkommen, danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem
addListener
Aufruf, bist du eigentlich aufrufenloadInfo
statt der übergabe einer Referenz. Versuchen Sie Folgendes statt:Dadurch wird eine anonyme Funktion, die umhüllt Ihre
loadInfo
- Methode, ruft die Methode auf, wenn die anonyme Funktion ausgeführt wird.Alternativ, wenn Sie nicht alle Parameter in
loadInfo
, einfaches entfernen der Klammern würde auch funktionieren:Etwas Wert ist, im Auge zu behalten, wenn Sie eine solche Funktion verweist, ist der Bereich, in dem es aufgerufen wird. Wenn Sie auf der
'this'
Verweis, dass man in die situation, wo'this'
innerhalb der callback-Funktion wird in der Tat nicht auf den Umfang, in dem es erstellt wurde, sondern der Rahmen, innerhalb dessen es ausgeführt wird, die wahrscheinlich nicht enthalten sind die Felder oder Methoden, die Sie erwarten sind zu nennen, wodurch Fehler besagtUndefined
statt. Als Jonathan Punkte aus, die Sie verwenden müssen, diecall()
undapply()
Methoden, um explizit binden, um sicherzustellen, dass Ihre Funktion ausgeführt, die in den richtigen Bereich.Die Sie aufrufen loadInfo in der .addListener, nicht die Bereitstellung ein Referenzprojekt zu.
versuchen:
sehen http://www.alistapart.com/articles/getoutbindingsituations weitere Informationen zum binden von Argumenten an Funktionen.
siehe auch https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply weitere Informationen auf der sehr nützlich gelten() (auch empfehlenswert, dass Sie sich rufen() sowie)
loadInfo(1)
bedeutet das ausführen dieser Funktion sofort, aber Sie brauchen, um passieren eine callback-Funktion, die GEvent.addListener () - Methode. Für die, die Sie verwenden können, anonyme Funktion:Obwohl GEvent.addListener( Marke1, "click", function() {
loadInfo(1);
});
wurde verwendet, bin nicht immer link, um die Markierung zu verschieben neben