Ticket #603: stopObserving.patch
| File stopObserving.patch, 4.3 kB (added by euzuro, 2 years ago) |
|---|
-
lib/OpenLayers/Events.js
old new 88 88 * element's cached observers, calling stopObserving on each one, 89 89 * skipping those entries which can no longer be removed. 90 90 * 91 * @param { String} elementId91 * @param {DOMElement || String} elementParam 92 92 */ 93 stopObservingElement: function(elementId) { 93 stopObservingElement: function(elementParam) { 94 95 var elementId = (typeof elementParam == "string") ? elementParam 96 : OpenLayers.Util.getElement(elementParam).id; 97 94 98 var elementObservers = OpenLayers.Event.observers[elementId]; 95 99 if (elementObservers) { 96 100 var i=0; … … 141 145 * @type Boolean 142 146 */ 143 147 stopObserving: function(elementParam, name, observer, useCapture) { 148 useCapture = useCapture || false; 149 150 var element = OpenLayers.Util.getElement(elementParam); 151 var elementId = (typeof elementParam == "string") ? elementParam 152 : element.id; 153 154 if (name == 'keypress') { 155 if ( navigator.appVersion.match(/Konqueror|Safari|KHTML/) || 156 element.detachEvent) { 157 name = 'keydown'; 158 } 159 } 160 161 // find element's entry in this.observers cache and remove it 144 162 var foundEntry = false; 145 var element = OpenLayers.Util.getElement(elementParam);146 if (element ) {163 var elementObservers = OpenLayers.Event.observers[elementId]; 164 if (elementObservers) { 147 165 148 useCapture = useCapture || false; 149 150 if (name == 'keypress') { 151 if ( navigator.appVersion.match(/Konqueror|Safari|KHTML/) || 152 element.detachEvent) { 153 name = 'keydown'; 154 } 155 } 156 157 // find element's entry in this.observers cache and remove it 158 var elementObservers = OpenLayers.Event.observers[element.id]; 159 if (elementObservers) { 160 161 // find the specific event type in the element's list 162 var i=0; 163 while(!foundEntry && i < elementObservers.length) { 164 var cacheEntry = elementObservers[i]; 165 166 if ((cacheEntry.name == name) && 167 (cacheEntry.observer == observer) && 168 (cacheEntry.useCapture == useCapture)) { 169 170 elementObservers.splice(i, 1); 171 if (elementObservers.length == 0) { 172 delete OpenLayers.Event.observers[element.id]; 173 } 174 foundEntry = true; 175 break; 166 // find the specific event type in the element's list 167 var i=0; 168 while(!foundEntry && i < elementObservers.length) { 169 var cacheEntry = elementObservers[i]; 170 171 if ((cacheEntry.name == name) && 172 (cacheEntry.observer == observer) && 173 (cacheEntry.useCapture == useCapture)) { 174 175 elementObservers.splice(i, 1); 176 if (elementObservers.length == 0) { 177 delete OpenLayers.Event.observers[element.id]; 176 178 } 177 i++; 179 foundEntry = true; 180 break; 178 181 } 182 i++; 179 183 } 180 181 //actually remove the event listener from browser182 if (element.removeEventListener) {183 element.removeEventListener(name, observer, useCapture);184 } else if (element && element.detachEvent) {185 element.detachEvent('on' + name, observer);186 }187 184 } 185 186 //actually remove the event listener from browser 187 if (element.removeEventListener) { 188 element.removeEventListener(name, observer, useCapture); 189 } else if (element && element.detachEvent) { 190 element.detachEvent('on' + name, observer); 191 } 188 192 return foundEntry; 189 193 }, 190 194
