diff --git a/lib/OpenLayers/Handler/Click.js b/lib/OpenLayers/Handler/Click.js index a149bc0ca0..62a3baad10 100644 --- a/lib/OpenLayers/Handler/Click.js +++ b/lib/OpenLayers/Handler/Click.js @@ -159,7 +159,10 @@ OpenLayers.Handler.Click = OpenLayers.Class(OpenLayers.Handler, { this.clearTimer(); } else { // set the timer, send evt only if single is true - var clickEvent = this.single ? evt : null; + //use a clone of the event object because it will no longer + //be a valid event object in IE in the timer callback + var clickEvent = this.single ? + OpenLayers.Util.extend({}, evt) : null; this.timerId = window.setTimeout( OpenLayers.Function.bind(this.delayedCall, this, clickEvent), this.delay diff --git a/lib/OpenLayers/Handler/Hover.js b/lib/OpenLayers/Handler/Hover.js index 1d04e2708a..28644ea6ab 100644 --- a/lib/OpenLayers/Handler/Hover.js +++ b/lib/OpenLayers/Handler/Hover.js @@ -86,6 +86,9 @@ OpenLayers.Handler.Hover = OpenLayers.Class(OpenLayers.Handler, { this.clearTimer(); this.callback('move', [evt]); this.px = evt.xy; + // clone the evt so original properties can be accessed even + // if the browser deletes them during the delay + evt = OpenLayers.Util.extend({}, evt); this.timerId = window.setTimeout( OpenLayers.Function.bind(this.delayedCall, this, evt), this.delay diff --git a/tests/Handler/test_Click.html b/tests/Handler/test_Click.html index c0fe4a30b5..65197dff1f 100644 --- a/tests/Handler/test_Click.html +++ b/tests/Handler/test_Click.html @@ -129,10 +129,10 @@ t.fail("clearTimeout called with non-existent timerId"); } } - var testEvt = Math.random(); + var testEvt = {id: Math.random()}; handler.callbacks = { "click": function(evt) { - t.eq(evt, testEvt, + t.eq(evt.id, testEvt.id, "(click w/ single true) click callback called with correct evt"); }, "dblclick": function(evt) { @@ -203,7 +203,7 @@ // mouse moves one pixel, click should be called handler.callbacks = { "click": function(evt) { - t.ok(evt == clickEvt, "(pixelTolerance met) click called"); + t.ok(evt.xy == clickEvt.xy, "(pixelTolerance met) click called"); } }; map.events.triggerEvent("click", clickEvt); diff --git a/tests/Handler/test_Hover.html b/tests/Handler/test_Hover.html index 630b9123e0..075aa14f71 100644 --- a/tests/Handler/test_Hover.html +++ b/tests/Handler/test_Hover.html @@ -78,16 +78,16 @@ var testEvt; // test pause and move callbacks - four tests here (2 from setTimeout above) - testEvt = Math.random(); + testEvt = {id: Math.random()}; handler.callbacks = { "pause": function(evt) { - t.eq(evt, testEvt, + t.eq(evt.id, testEvt.id, "pause callback called with correct evt"); - }, - "move": function(evt) { - t.eq(evt, testEvt, - "move callback called with correct evt"); - } + }, + "move": function(evt) { + t.eq(evt.id, testEvt.id, + "move callback called with correct evt"); + } }; map.events.triggerEvent("mousemove", testEvt); handler.clearTimer(); @@ -116,7 +116,7 @@ // mouse moves 3x3 pixels, callbacks should be called handler.callbacks = { "pause": function(evt) { - t.ok(evt == testEvt, "(pixelTolerance unmet) pause callback called"); + t.ok(evt.xy == testEvt.xy, "(pixelTolerance unmet) pause callback called"); }, "move": function(evt) { t.ok(evt == testEvt, "(pixelTolerance unmet) move callback called");