Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的传单弹出窗口意外关闭?_Javascript_Jquery_Popup_Leaflet - Fatal编程技术网

Javascript 为什么我的传单弹出窗口意外关闭?

Javascript 为什么我的传单弹出窗口意外关闭?,javascript,jquery,popup,leaflet,Javascript,Jquery,Popup,Leaflet,我有一个功能,允许用户查找标记并缩放到它的位置,在这一点上我希望弹出窗口打开。一切正常,除了在函数启动后弹出窗口关闭。我不知道是什么使弹出窗口关闭 这是一个问题的答案。如果我使用“.lookFor”元素,并且位置在map div之外,则该功能正常工作;然而,我需要的功能是它所在的地方。它是一个选项卡式界面的一部分,该界面包含其他地图工具,这些工具位于全屏地图上 这是我的相关代码: var geoJsonDataFeatures = { "type": "FeatureCollection", "

我有一个功能,允许用户查找标记并缩放到它的位置,在这一点上我希望弹出窗口打开。一切正常,除了在函数启动后弹出窗口关闭。我不知道是什么使弹出窗口关闭

这是一个问题的答案。如果我使用“.lookFor”元素,并且位置在map div之外,则该功能正常工作;然而,我需要的功能是它所在的地方。它是一个选项卡式界面的一部分,该界面包含其他地图工具,这些工具位于全屏地图上

这是我的相关代码:

var geoJsonDataFeatures = {
"type": "FeatureCollection",
"features":[]
};

//create popup content
var htmlString = "<div>popup html goes here....</div>";
var popupContent = L.popup().setContent(htmlString);

//create geoJson object for each marker
var geoJsonData = {
"type": "Feature",
"id": siteNo, //a string saved as a variable 
"properties": {
    "popupContent": popupContent,
    "icon": icon //an L.icon object
    },
"geometry": {
    "type": "Point",
    "coordinates": [longitude, latitude] //strings saved as variables
    }
}

//push the geoJson feature into the features object
geoJsonDataFeatures.features.push(geoJsonData);

//create the map layer that holds the markers
var geoJsonDataLayer = L.geoJson(geoJsonDataFeatures, {
    onEachFeature: function (feature, layer) {
    layer.bindPopup(feature.properties.popupContent);
    layer.setIcon(feature.properties.icon);
    }
}).addTo(map);

....

//when the user has selected a site from a dropdown select menu,
//we pass the site number (siteNo) to a function to zoom and open the
//marker popup:

zoomOpenPopup(siteNo);

function zoomOpenPopup(siteNo){
var marker = {};
var popup = {};
var layerObj = {};

    if(map.hasLayer(geoJsonDataLayer))
    {
    layerObj = geoJsonDataLayer;
    }

    jQuery.each(layerObj._layers, function(k){

        if(siteNo == layerObj._layers[k].feature.id)
        {
        marker = layerObj._layers[k];
        popup = layerObj._layers[k].feature.properties.popupContent;
        }  
    });

marker.openPopup();
//popup._isOpen = true; //doesn't work
//popup.openOn(map); //doesn't work
//map.openPopup(popup); //doesn't work
 alert("done!"); 
}

有人遇到过类似的事情吗

我相信您的动画
setView
正在关闭弹出窗口,作为
moveend
事件的一部分

相反,尝试使用此代码单击按钮。它将等待
moveend
完成,然后准备弹出窗口

jQuery("#lookForButton").click(function(){
    map.on('moveend', function(e) {
        zoomOpenPopup("11486990");
        map.off('moveend');
    });
    map.setView([42.1676459, -121.776391], 14);
});

你有没有可能在某个地方发布这个实时消息,这样我们就可以看到整个流程?当然!给你。我认为问题可能与元素“.lookFor”在地图顶部的位置有关。对于我的实际站点,我在一个引导选项卡式界面中有这个元素,该界面为用户提供了多种工具,我希望这个站点查找工具包含在这个元素中。snkashis-我一直在玩你的代码,我遇到了麻烦。它只在一个站点上运行得很好,但是当我添加更多的站点时,我会遇到同样的问题。看这个。有什么想法吗?我明白了-仔细看看。看起来你的按钮控制也引起了问题。在特性中,使用L.Control,而不是像那样尝试将元素绝对定位在地图的顶部。试试这把小提琴,看看我的意思。我还删除了你对private _latLng的使用,改为.getLatLng(),还使用了传单的核心eachLayer函数,而不是jquery版本。是的,我也尝试过同样的方法。下面是一个使用自定义控件而不是绝对定位元素的示例,但它不起作用。非常感谢您在这方面的帮助。添加
L.DomEvent.disableClickPropagation(div)
after
div.innerHTML=lookForHTML。点击是通过地图。
jQuery("#lookForButton").click(function(){
    map.on('moveend', function(e) {
        zoomOpenPopup("11486990");
        map.off('moveend');
    });
    map.setView([42.1676459, -121.776391], 14);
});