Php Openlayer:删除多个弹出窗口

Php Openlayer:删除多个弹出窗口,php,javascript,html,openlayers,Php,Javascript,Html,Openlayers,我正在尝试使用OpenLayers 2.11创建一个空间调查,但在关闭多个弹出窗口的功能方面存在一些问题 以下代码适用于一个弹出窗口,但该函数无法关闭多个弹出窗口并发布内容 是否有OpenLayers方法在创建新弹出窗口时销毁旧弹出窗口 function submitform() { document.myform.submit(); loop_popups(); } -- 函数循环\u弹出窗口(){ 对于(var i=0;i

我正在尝试使用OpenLayers 2.11创建一个空间调查,但在关闭多个弹出窗口的功能方面存在一些问题

以下代码适用于一个弹出窗口,但该函数无法关闭多个弹出窗口并发布内容

是否有OpenLayers方法在创建新弹出窗口时销毁旧弹出窗口

function submitform() {
  document.myform.submit();
  loop_popups();
}
--

函数循环\u弹出窗口(){
对于(var i=0;i
--


使用
i
对数组进行计数,而从数组中删除成员只会删除一半的标记。相反,请尝试:

while( map.popups.length ) {
  map.removePopup( map.popups[0] );
}
如果要绝对确保循环不会永远重复:

/**
 * Closes all the popups.
 */
function closePopups() {
  // Make sure the loop terminates...
  var maxIterations = 100;

  while( map.popups.length && --maxIterations ) {
    var popup = map.popups[0];
    map.removePopup( popup );
    popup.destroy();
  }
}
这种约束环技术用于核电厂

假设您有5个弹出窗口

  • 弹出窗口=5,i=0,最大弹出窗口长度=5
  • 弹出窗口=4,i=1,最大弹出窗口长度=4
  • 弹出窗口=3,i=2,最大弹出窗口长度=3
  • 弹出窗口=2,i=3,最大弹出窗口长度=2
  • i
    的值现在超过了
    max.popups.length
    。循环终止,但某些弹出窗口尚未关闭。(在尝试访问弹出窗口数组时,甚至可能出现索引越界错误…)

    您可以将循环编写为:

    function loop_popups() {
      for( var i = map.popups.length - 1; i >= 0; i-- ) { 
        map.removePopup(map.popups[i]); 
      };
    }
    

    这不再与移动目标进行比较,而且执行速度也将比原始循环快,因为与零进行比较比与寄存器(在大多数计算机架构上)进行比较快。

    您可以将
    独占:true
    传递到
    addPopup
    以自动关闭所有其他弹出窗口,如:

    map.addPopup(popup, true)
    

    我发现这在处理OpenLayers本身的问题时很有用。我不知道其他用户在与核电站进行比较时想做什么;这完全没有必要。

    form.submit()不会导致页面重新加载吗?
    function loop_popups() {
      for( var i = map.popups.length - 1; i >= 0; i-- ) { 
        map.removePopup(map.popups[i]); 
      };
    }
    
    map.addPopup(popup, true)