diff --git a/lib/OpenLayers/Layer/Markers.js b/lib/OpenLayers/Layer/Markers.js index a55b7fcf04..e56a2da7fe 100644 --- a/lib/OpenLayers/Layer/Markers.js +++ b/lib/OpenLayers/Layer/Markers.js @@ -120,11 +120,13 @@ OpenLayers.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, { * marker - {} */ removeMarker: function(marker) { - OpenLayers.Util.removeItem(this.markers, marker); - if ((marker.icon != null) && (marker.icon.imageDiv != null) && - (marker.icon.imageDiv.parentNode == this.div) ) { - this.div.removeChild(marker.icon.imageDiv); - marker.drawn = false; + if (this.markers && this.markers.length) { + OpenLayers.Util.removeItem(this.markers, marker); + if ((marker.icon != null) && (marker.icon.imageDiv != null) && + (marker.icon.imageDiv.parentNode == this.div) ) { + this.div.removeChild(marker.icon.imageDiv); + marker.drawn = false; + } } }, diff --git a/tests/Layer/test_Markers.html b/tests/Layer/test_Markers.html index 5b70308b1e..95889ed938 100644 --- a/tests/Layer/test_Markers.html +++ b/tests/Layer/test_Markers.html @@ -23,7 +23,7 @@ t.eq( layer.markers.length, 1, "addLayer adds marker to layer." ); } function test_98_Layer_Markers_addMarker_removeMarker (t) { - t.plan( 3 ); + t.plan( 4 ); var map = new OpenLayers.Map('map'); var baseLayer = new OpenLayers.Layer.WMS("Test Layer", @@ -40,6 +40,11 @@ t.ok( marker.icon.imageDiv.parentNode != layer.div, "removeMarker removes marker image node from layer node." ); layer.addMarker(marker); t.ok( marker.icon.imageDiv.parentNode == layer.div, "addMarker adds marker image node into layer node." ); + + layer.markers = null; + layer.removeMarker(marker); + t.ok(true, "removing marker when no markers present does not script error"); + } function test_99_Layer_Markers_destroy (t) { t.plan( 1 );