Der gewünschte Effekt ist, dass Marker die nicht im Sichtbereich liegen wieder gelöscht werden. Die Alertbox taucht ganz oft auf, allerdings immer mit dem Inhalt undefined. Kann aber doch eigentlich nicht sein? Wenn die foreach schleife objekte durchgeht muss ich die doch auch so anwählen können?
wird das Element “markers” des Layer-Objektes um 1 Element geschrumpft.
Wenn das $.each so implementiert ist, dass die Anzahl der Objekte zu Beginn der Schleife bestimmt und dann der gespeicherte Wert benutzt wird, wird es zu Ende der Schleife auf ein Feld hinter dem Ende des Arrays zugreifen. Es gibt übrigens ein zweites Problem: wenn der die Felder 0,1,2,…,i,…len-1 bearbeitet, und Du bei der Bearbeitung von i das Element i löschst, rückt das Element i+1 auf den Platz i, i+2 auf den Platz i+1 usw. Das heißt aber, dass das Element i+1 nicht bearbeitet wird.
Ich schlage vor, dass Du die zu löschenden Elemente zuerst in einem Array zwischenspeicherst:
var moribundi=[];
$.each(layer_no_markers.markers, function(i, no_marker) {
if(!bounds.containsLonLat(no_marker)) moribundi.push(no_marker);
}
for (i in moribundi) {
var no_marker=moribundi[i];
layer_no_markers.removeMarker(no_marker);
no_marker.destroy();
}