| 

.NET C# Java Javascript Exception

3
Hallo,

momentan gelingt es mit nicht einen addListener für einen Marker zu setzen. Wenn ich den Listener im geocoder Block setze, funktioniert. Ich mache frage mich, wieso ich aber von "außen" nicht dran komme, obwohl ich ja die Variable einsatz1 global deklariert habe.

function initialize() {
var latlng = new google.maps.LatLng(51.6056965, 7.1715616);
var myOptions = {
zoom: 14,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);

geocoder = new google.maps.Geocoder();
var address,einsatz1,marker0;
var image = 'feuer.jpg';

address ="Berlin";
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
einsatz1 = results[0].geometry.location;
//alert(einsatz1);
marker0 = new google.maps.Marker({
position: einsatz1,
map: map,
title:"Toller Ort",
});
}
else
{
alert("Geocode was not successful for the following reason: " + status);
}
});

alert('Abarbeitung');
try{
google.maps.event.addListener(marker0, 'click', function() {
alert("Hier wurde ein Event empfangen");
//map.setZoom(8);
});
}
catch(err){
alert('Catch wird ausgeführt!');
alert('Fehlerbeschreibung: ' + err.message);
}

}


Als Fehlermeldung bekomme ich im FF "a is undefined".

Weiß jemand Rat?
23.05.2012
DTAG 170 1 8
1 Antwort
2
Leider hast Du nicht den vollständigen Code gepostet, deswegen hat Dir wahrscheinlich auch noch keiner geantwortet.

Folgendes ist mir in Deinem Code aufgefallen

1. Die Variable marker0 ist nicht global!
2. Nach dem Setzen des Markers ist ein Komma zuviel hinter der title-Eigenschaft.
3. Wird die initialize()-Funktion nicht aufgerufen (bzw. hast Du den Code nicht mitgepostet).

4. und das ist das Wichtigste:
Du musst warten, bis die Google-Map vollständig geladen ist, bevor Du auf die Karte zugreifen kannst in Deiner "Abarbeitung" - deswegen bekommst Du den "undefined"-Fehler.

Hierfür gibt es einen kleinen Trick, und zwar musst Du folgendes in der initialize()-Funktion hinzufügen:

google.maps.event.addListenerOnce(map, 'idle', function () {
// do something ...
});


LG, Micha

Hier der von mir überarbeitete Sourcecode - ich hoffe er hilft Dir weiter.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" language="javascript">

var marker0;

function initialize() {
var latlng = new google.maps.LatLng(51.6056965, 7.1715616);
var myOptions = {zoom: 14,center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

geocoder = new google.maps.Geocoder();
var address,einsatz1;
var image = 'feuer.jpg';

address = "Berlin";

geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
einsatz1 = results[0].geometry.location;
alert(einsatz1);

marker0 = new google.maps.Marker({position: einsatz1, map: map, title:"Toller Ort"});
}
else
{
alert("Geocode was not successful for the following reason: " + status);
}
}
);


google.maps.event.addListenerOnce(map, 'idle', function () {
// hier rufst Du jetzt Deine Methode auf:
Abarbeitung();
});
}


function Abarbeitung() {
alert('Abarbeitung');

try{
// Test, ob der Marker da ist :-)
alert(marker0.position);

google.maps.event.addListener(marker0, 'click', function() { alert ("Hier wurde ein Event empfangen");});
}
catch (err)
{
alert('Catch wird ausgeführt!');
alert('Fehlerbeschreibung: ' + err.message);
}
}

</script>

</head>
<body onload="initialize();">
<form id="form1" runat="server">
<div id="map_canvas" style="width:500px;height:500px;">
</div>
</form>
</body>
</html>
26.05.2012
mblaess 1,2k 1 9

Stelle deine Javascript-Frage jetzt!