bouni: Google maps API - for Schleife / For each

Hallo allerseits,

Ich hab folgendes Problem:

Ich erstell mit der Gmaps API mehrere Marker und mach Sie Dragable, beim absetzen les ich die Koordinaten von allen aus und trag Sie in ein Textfeld getrennt durch Komma:

  
  
GEvent.addListener(marker, "dragend", function()  
      {  
      document.getElementById("lat").value = ""; // Feld leeren  
      document.getElementById("lng").value = "";  // Feld leeren  
  
      for each(var item in marker_array)  
        {  
        document.getElementById("lat").value += item.getLatLng().lat() + ",";  
        document.getElementById("lng").value += item.getLatLng().lng() + ",";  
        }  
      });  

Das funktioniert einwandfrei im FF, aber im IE nicht da der kein for each unterstützt.

wenn ich aber folgenden Code nehme geht es in keinem Browser:

  
GEvent.addListener(marker, "dragend", function()  
      {  
      document.getElementById("lat").value = ""; // Feld leeren  
      document.getElementById("lng").value = "";  // Feld leeren  
  
      for(var i = 0; i < marker_array.length; i++)  
        {  
        document.getElementById("lat").value += marker_array[i].getLatLng().lat() + ",";  
        document.getElementById("lng").value += marker_array[i].getLatLng().lng() + ",";  
        }  
      });  

In der Fehler Konsole vom FF kommt "marker_array[i] is undefined"!

Am Anfang beim setzen der Marker erstell ich das array Marker_array mit folgendem Code:

  
var marker = new GMarker(center , {title: marker_counter ,icon : my_icon, draggable : true , bouncy : true , bounceGravity : 0.5});  
  
marker_array[marker_counter] = marker;  
marker_counter++;  

Den Zähler initialisiere ich ausserhalb der Funktion mit 0!

Wenn jemandem ne Lösung einfällt wär ich Dankbar :D

Gruss Bouni

  1. Hallo,

    In der Fehler Konsole vom FF kommt "marker_array[i] is undefined"!

    Das deutet darauf hin, dass Du das Array marker_array irgendwo größer initialisiert hast, als Du es mit Werten befüllst. Die nicht mit Werten befüllten Array-Elemente sind dann "undefined". Array.lenght bringt nämlich die gesamte Arraylänge, wogegen for each nur die befüllten Elemente durchläuft.

    Beispiel (nur für FireFox):

      
    marker_array = new Array(4); // Array mit Länge 4  
    marker_array[0] = "M1";  
    marker_array[1] = "M2";  
    marker_array[2] = "M3";  
    // aber nur 3 Elemente befüllt  
      
    for each(var item in marker_array) {  
     alert(item); //bringt M1, M2, M3  
    }  
      
    for(var i = 0; i < marker_array.length; i++) { // marker_array.length == 4  
     alert(i + " = " + marker_array[i]); // bringt M1, M2, M3 und undefined  
    }  
    
    

    viele Grüße

    Axel

    1. Hallo,

      Dank erst einmal für die Antworten.

      Hab den Fehler gefunden.

      Ich befülle das Array mittels split(",") und da lag der Fehler.

      Z.B. A,B,C, kommt aus der Datenbank und split legt 4 Einträge im Array an [0] = A, [1] = B, [2] = C [3] = ""

      Und dieses leere element hat dem Script das Bein gestellt :)

      Geht jetzt auf jeden Fall.

      P.S. könnte der Dumme IE for each, dann hätte es trotzdem funktioniert!

      Gruss Bouni

  2. Moin!

    Am Anfang beim setzen der Marker erstell ich das array Marker_array mit folgendem Code:

    var marker = new GMarker(center , {title: marker_counter ,icon : my_icon, draggable : true , bouncy : true , bounceGravity : 0.5});

    marker_array[marker_counter] = marker;
    marker_counter++;

      
    Wo definierst du da, dass marker\_array ein Array ist?  
      
    
    > Den Zähler initialisiere ich ausserhalb der Funktion mit 0!  
      
    Code weglassen ist in diesem Fall keine so gute Idee, weil genau darin ja der Fehler stecken könnte.  
      
     - Sven Rautenberg