我编写了一个基本函数,允许我从地图外的链接显示弹出窗口。打开弹出窗口的功能工作正常,但我无法关闭它。
演示链接: http: //www.catchtherain.com/bikestats/stations.php - 单击左侧选项卡式面板中的链接。
这里有更多细节......
一张典型的地图在从 kml 加载的矢量图层“站”上具有大约 300 个要素。这些是使用 onload 激活的
select = new OpenLayers.Control.SelectFeature(stations);
stations.events.on({
"featureselected": onFeatureSelect,
"featureunselected": onFeatureUnselect
});
map.addLayer(stations);
map.addControl(select);
select.activate();
效果很好 - 我可以打开和关闭弹出窗口。
使用我的地图外链接,我正在调用 onclick="showMyPopup([x]),其中 [x] 是从 kml 加载的 ID 属性。showMyPopup 函数是
function showMyPopup(myID){
for(var a = 0; a < stations.features.length; a++){ //loop through all the features
var feature = stations.features[a];
if (feature.attributes.ID.value == myID) { //until it finds the one with the matching ID attribute
var content = "<h4>" + feature.attributes.name + "</h4>" + feature.attributes.description;
popup = new OpenLayers.Popup.FramedCloud("chicken",
feature.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(200,200),
content,
null, true, onPopupClose);
feature.popup = popup;
map.addPopup(popup);
}
}
}
这会按预期从站层打开正确的弹出窗口,并且我可以使用站层上的 DOM 检查器看到弹出窗口,就像通过单击地图功能加载时出现的一样,但似乎没有办法关闭它。车站图层上的原始功能运行良好(打开和关闭)。
任何帮助将不胜感激(也许有更简单的方法来解决这个问题?)
谢谢,詹姆斯
PS,以防万一,这里是 onFeatureUnselect 函数......
function onFeatureUnselect(event) {
var feature = event.feature;
if(feature.popup) {
map.removePopup(feature.popup);
feature.popup.destroy();
delete feature.popup;
}
}