ThinkGeo.com    |     Documentation    |     Premium Support

Popups requiring multiple clicks to close

I am trying to resolve an issue where it takes multiple clicks to close a pop-up.



I capture the PopUp closed event, so that I can update a DataGridView in another UpdatePanel. However, when I closes the first PopUp, it takes one click to close; when I close the second PopUp it takes 2 clicks to close; when I close the fifth PopUp it takes 5 clicks to close, and so on. 



Currently, my javascript code looks like below. If I comment out the doPostBack line, then all PopUps close with one click.



Any suggestions?




var Map; 
function OnMapCreated(map) { 
            Map = map; 
            if (map.popups.length > 0) { 
                OpenLayers.Event.stopObservingElement(map.popups[0].closeDiv, “click”, OpenLayers.Function.bindAsEventListener(function () { this.hide(); }, map.popups[0]));                 
                OpenLayers.Event.observe(map.popups[0].closeDiv, “click”, OpenLayers.Function.bindAsEventListener(closeCallBack, map.popups[0]));                 
                OpenLayers.Event.observe(map.popups[0].closeDiv, “touchend”, OpenLayers.Function.bindAsEventListener(closeCallBack, map.popups[0]));  
            
  
         function closeCallBack() { 
            Map.popups[0].hide(); 
            __doPostBack(’<%=UpdatePanelExceptionsGridView.ClientID %>’, “PopupClosed”); 
            this.hide(); 
        }


Hi Treasa, 
  
 Thanks for your post, but I am sorry we haven’t recreated your issue today.  
  
 Here is our test code: 
  
 
var Map;
 
        function OnMapCreated(map) {
 
            Map = map;
 
            if (map.popups.length > 0) {
                var i = 0;
                for (i = 0; i < map.popups.length; i++) {
                    OpenLayers.Event.stopObservingElement(map.popups[i].closeDiv, “click”, OpenLayers.Function.bindAsEventListener(function () { this.hide(); }, map.popups[i]));
                    OpenLayers.Event.observe(map.popups[i].closeDiv, “click”, OpenLayers.Function.bindAsEventListener(closeCallBack, map.popups[i]));
                    OpenLayers.Event.observe(map.popups[i].closeDiv, “touchend”, OpenLayers.Function.bindAsEventListener(closeCallBack, map.popups[i]));
                }
            }
        }
 
        function closeCallBack() {
            var itemIndex;
            for (itemIndex = 0; itemIndex < Map.popups.length; itemIndex++) {
                if (Map.popups[itemIndex].id === this.id) {
                    Map.popups[itemIndex].hide();
                }
            }
            __doPostBack(’ ', “PopupClosed”);
 
            this.hide();
        }
 
 
  
 I made some changes to your code and it is works well.  
  
 It just need one click per popup to close, even I add _doPostBack calling.  
  
 Please correct me if I misunderstand anything.  
  
 If possible, more detail information or a simple sample should be very helpful. 
    
 Best regards, 
  
 Kevin

Thank you. My original javascript only used the 0 index of the popups; by using the for loop over all the popups, as in your sample, the popups are closing correctly.



Again, thank you for your help.

Treasa

Hi Treasa, 
  
 Great to hear it helped, if you have any more question, please feel free to let us know. 
  
 Best Regards 
  
 Summer