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:
@@ -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;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user