diff --git a/lib/OpenLayers/Events.js b/lib/OpenLayers/Events.js index 269666128c..1d269577bf 100644 --- a/lib/OpenLayers/Events.js +++ b/lib/OpenLayers/Events.js @@ -88,9 +88,13 @@ OpenLayers.Event = { * element's cached observers, calling stopObserving on each one, * skipping those entries which can no longer be removed. * - * @param {String} elementId + * @param {DOMElement || String} elementParam */ - stopObservingElement: function(elementId) { + stopObservingElement: function(elementParam) { + + var elementId = (typeof elementParam == "string") ? elementParam + : OpenLayers.Util.getElement(elementParam).id; + var elementObservers = OpenLayers.Event.observers[elementId]; if (elementObservers) { var i=0; @@ -141,49 +145,49 @@ OpenLayers.Event = { * @type Boolean */ stopObserving: function(elementParam, name, observer, useCapture) { - var foundEntry = false; - var element = OpenLayers.Util.getElement(elementParam); - if (element) { + useCapture = useCapture || false; - useCapture = useCapture || false; - - if (name == 'keypress') { - if ( navigator.appVersion.match(/Konqueror|Safari|KHTML/) || - element.detachEvent) { - name = 'keydown'; - } + var element = OpenLayers.Util.getElement(elementParam); + var elementId = (typeof elementParam == "string") ? elementParam + : element.id; + + if (name == 'keypress') { + if ( navigator.appVersion.match(/Konqueror|Safari|KHTML/) || + element.detachEvent) { + name = 'keydown'; } - - // find element's entry in this.observers cache and remove it - var elementObservers = OpenLayers.Event.observers[element.id]; - if (elementObservers) { - - // find the specific event type in the element's list - var i=0; - while(!foundEntry && i < elementObservers.length) { - var cacheEntry = elementObservers[i]; - - if ((cacheEntry.name == name) && - (cacheEntry.observer == observer) && - (cacheEntry.useCapture == useCapture)) { - - elementObservers.splice(i, 1); - if (elementObservers.length == 0) { - delete OpenLayers.Event.observers[element.id]; - } - foundEntry = true; - break; + } + + // find element's entry in this.observers cache and remove it + var foundEntry = false; + var elementObservers = OpenLayers.Event.observers[elementId]; + if (elementObservers) { + + // find the specific event type in the element's list + var i=0; + while(!foundEntry && i < elementObservers.length) { + var cacheEntry = elementObservers[i]; + + if ((cacheEntry.name == name) && + (cacheEntry.observer == observer) && + (cacheEntry.useCapture == useCapture)) { + + elementObservers.splice(i, 1); + if (elementObservers.length == 0) { + delete OpenLayers.Event.observers[element.id]; } - i++; + foundEntry = true; + break; } + i++; } - - //actually remove the event listener from browser - if (element.removeEventListener) { - element.removeEventListener(name, observer, useCapture); - } else if (element && element.detachEvent) { - element.detachEvent('on' + name, observer); - } + } + + //actually remove the event listener from browser + if (element.removeEventListener) { + element.removeEventListener(name, observer, useCapture); + } else if (element && element.detachEvent) { + element.detachEvent('on' + name, observer); } return foundEntry; },