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:
+44
-40
@@ -88,9 +88,13 @@ OpenLayers.Event = {
|
|||||||
* element's cached observers, calling stopObserving on each one,
|
* element's cached observers, calling stopObserving on each one,
|
||||||
* skipping those entries which can no longer be removed.
|
* 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];
|
var elementObservers = OpenLayers.Event.observers[elementId];
|
||||||
if (elementObservers) {
|
if (elementObservers) {
|
||||||
var i=0;
|
var i=0;
|
||||||
@@ -141,49 +145,49 @@ OpenLayers.Event = {
|
|||||||
* @type Boolean
|
* @type Boolean
|
||||||
*/
|
*/
|
||||||
stopObserving: function(elementParam, name, observer, useCapture) {
|
stopObserving: function(elementParam, name, observer, useCapture) {
|
||||||
var foundEntry = false;
|
useCapture = useCapture || false;
|
||||||
var element = OpenLayers.Util.getElement(elementParam);
|
|
||||||
if (element) {
|
|
||||||
|
|
||||||
useCapture = useCapture || false;
|
var element = OpenLayers.Util.getElement(elementParam);
|
||||||
|
var elementId = (typeof elementParam == "string") ? elementParam
|
||||||
if (name == 'keypress') {
|
: element.id;
|
||||||
if ( navigator.appVersion.match(/Konqueror|Safari|KHTML/) ||
|
|
||||||
element.detachEvent) {
|
if (name == 'keypress') {
|
||||||
name = 'keydown';
|
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];
|
// find element's entry in this.observers cache and remove it
|
||||||
if (elementObservers) {
|
var foundEntry = false;
|
||||||
|
var elementObservers = OpenLayers.Event.observers[elementId];
|
||||||
// find the specific event type in the element's list
|
if (elementObservers) {
|
||||||
var i=0;
|
|
||||||
while(!foundEntry && i < elementObservers.length) {
|
// find the specific event type in the element's list
|
||||||
var cacheEntry = elementObservers[i];
|
var i=0;
|
||||||
|
while(!foundEntry && i < elementObservers.length) {
|
||||||
if ((cacheEntry.name == name) &&
|
var cacheEntry = elementObservers[i];
|
||||||
(cacheEntry.observer == observer) &&
|
|
||||||
(cacheEntry.useCapture == useCapture)) {
|
if ((cacheEntry.name == name) &&
|
||||||
|
(cacheEntry.observer == observer) &&
|
||||||
elementObservers.splice(i, 1);
|
(cacheEntry.useCapture == useCapture)) {
|
||||||
if (elementObservers.length == 0) {
|
|
||||||
delete OpenLayers.Event.observers[element.id];
|
elementObservers.splice(i, 1);
|
||||||
}
|
if (elementObservers.length == 0) {
|
||||||
foundEntry = true;
|
delete OpenLayers.Event.observers[element.id];
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
i++;
|
foundEntry = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//actually remove the event listener from browser
|
|
||||||
if (element.removeEventListener) {
|
//actually remove the event listener from browser
|
||||||
element.removeEventListener(name, observer, useCapture);
|
if (element.removeEventListener) {
|
||||||
} else if (element && element.detachEvent) {
|
element.removeEventListener(name, observer, useCapture);
|
||||||
element.detachEvent('on' + name, observer);
|
} else if (element && element.detachEvent) {
|
||||||
}
|
element.detachEvent('on' + name, observer);
|
||||||
}
|
}
|
||||||
return foundEntry;
|
return foundEntry;
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user