make stopObserving/stopObservingElement more resilient: can accept either

elements or ids. Closes #603 (and makes #604 work).


git-svn-id: http://svn.openlayers.org/trunk/openlayers@2946 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2007-03-31 19:46:04 +00:00
parent 1dea6430cd
commit 53b23bdf37

View File

@@ -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;
},