diff --git a/examples/events.html b/examples/events.html new file mode 100644 index 0000000000..4e47dfd112 --- /dev/null +++ b/examples/events.html @@ -0,0 +1,154 @@ + + + OpenLayers Event Handling + + + + + +

Event Handling

+ +
+
+ +

+ Demonstrating various styles of event handling in OpenLayers. +

+ +
+
+ +
+ + diff --git a/lib/OpenLayers/Control.js b/lib/OpenLayers/Control.js index 86daa99778..a98cc00e3e 100644 --- a/lib/OpenLayers/Control.js +++ b/lib/OpenLayers/Control.js @@ -178,9 +178,14 @@ OpenLayers.Control = OpenLayers.Class({ */ destroy: function () { if(this.events) { + if(this.eventListeners) { + this.events.un(this.eventListeners); + } this.events.destroy(); this.events = null; } + this.eventListeners = null; + // eliminate circular references if (this.handler) { this.handler.destroy(); diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index 2ba22a467d..a8ec7317ca 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -315,8 +315,12 @@ OpenLayers.Layer = OpenLayers.Class({ this.options = null; if (this.events) { + if(this.eventListeners) { + this.events.un(this.eventListeners); + } this.events.destroy(); } + this.eventListeners = null; this.events = null; }, diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index 52f507ebbd..fd84026c9e 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -545,6 +545,10 @@ OpenLayers.Map = OpenLayers.Class({ } this.viewPortDiv = null; + if(this.eventListeners) { + this.events.un(this.eventListeners); + this.eventListeners = null; + } this.events.destroy(); this.events = null;