Php Openlayer:删除多个弹出窗口
我正在尝试使用OpenLayers 2.11创建一个空间调查,但在关闭多个弹出窗口的功能方面存在一些问题 以下代码适用于一个弹出窗口,但该函数无法关闭多个弹出窗口并发布内容 是否有OpenLayers方法在创建新弹出窗口时销毁旧弹出窗口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
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个弹出窗口
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)