OpenLayers OpenLayers

Ticket #603: stopObserving.patch

File stopObserving.patch, 4.3 kB (added by euzuro, 2 years ago)

fix

  • lib/OpenLayers/Events.js

    old new  
    8888     *   element's cached observers, calling stopObserving on each one,  
    8989     *   skipping those entries which can no longer be removed. 
    9090     *  
    91      * @param {String} elementId 
     91     * @param {DOMElement || String} elementParam 
    9292     */ 
    93     stopObservingElement: function(elementId) { 
     93    stopObservingElement: function(elementParam) { 
     94 
     95        var elementId = (typeof elementParam == "string") ? elementParam  
     96                            : OpenLayers.Util.getElement(elementParam).id; 
     97 
    9498        var elementObservers = OpenLayers.Event.observers[elementId]; 
    9599        if (elementObservers) { 
    96100            var i=0; 
     
    141145     * @type Boolean 
    142146     */ 
    143147    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 
    144162        var foundEntry = false; 
    145         var element = OpenLayers.Util.getElement(elementParam)
    146         if (element) { 
     163        var elementObservers = OpenLayers.Event.observers[elementId]
     164        if (elementObservers) { 
    147165     
    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]; 
    176178                    } 
    177                     i++;            
     179                    foundEntry = true; 
     180                    break;  
    178181                } 
     182                i++;            
    179183            } 
    180          
    181             //actually remove the event listener from browser 
    182             if (element.removeEventListener) { 
    183                 element.removeEventListener(name, observer, useCapture); 
    184             } else if (element && element.detachEvent) { 
    185                 element.detachEvent('on' + name, observer); 
    186             } 
    187184        } 
     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        } 
    188192        return foundEntry; 
    189193    }, 
    190194