在mapbox中过滤标记后,弹出窗口不再起作用

时间:2015-04-18 22:19:53

标签: javascript filter popup mapbox

我已经在Mapbox中设置了外部geoJson文件的功能,并按照https://www.mapbox.com/mapbox.js/example/v1.0.0/custom-popup/上的示例将弹出窗口绑定到这些功能

var myLayer = L.mapbox.featureLayer(bldgData).addTo(map);

myLayer.eachLayer(function(layer) {

    // set up popup for each marker
    var content = "";
    var props = layer.feature.properties;
    var imagePart = "<img class='popupPic' src='images/thumbnails/" + props.filename + "' ></img>";
    var infoPart = "<h3 class='popupInfo'>" + props.bldgName + "</h3><p>" +
        props.architect + "<br />" + props.year + "</p>";
    content = imagePart + infoPart;

    layer.bindPopup(content, {closeButton: false});
});

弹出窗口设置为在鼠标悬停时显示...

myLayer.on('mouseover', function(e) {
    e.layer.closePopup();
    e.layer.openPopup();
});

myLayer.on('mouseout', function(e) {
    e.layer.closePopup();
});

我还设置了过滤功能,以便按照https://www.mapbox.com/mapbox.js/example/v1.0.0/filtering-markers/

中的示例显示所选功能
function chooseBldg(){
    var bldgs = document.getElementById("buildingTypeMenu").value;

    if(bldgs == "all") {
        myLayer.setFilter(function(f) {return true;});

    }
    else {
        myLayer.setFilter(function(f) {
            return f.properties['buildingType'] === bldgs;
        }); 
    }
}

首次显示页面时,弹出窗口正确显示,过滤器正确选择要显示的标记子集,但在触发过滤器后,鼠标悬停时不再显示弹出窗口。在完成过滤器后,是否需要重新绑定弹出窗口(通过显式触发eachLayer函数或其他内容)?

1 个答案:

答案 0 :(得分:0)

Rebind弹出窗口为我解决了这个问题。