第二次单击标记时,单张弹出窗口不会打开

时间:2014-03-23 13:49:01

标签: javascript ruby-on-rails popup leaflet

我使用leaflet.js在OSM地图上显示标记。

问题是,第一次点击标记时,弹出窗口会正常打开,但是第二次点击同一个标记时弹出窗口就不再打开了。

PS:代码中的其他任何地方我关闭弹出窗口(使用closePopup()功能)。在下面的块中,我甚至在点击标记时注释掉了其他弹出窗口的明确关闭 PPS:我的应用程序在Ruby on Rails上运行(ruby-1.9.3,Rails 3.2.16),并使用leaflet-rails(0.7.2)

bindListeners = function(marker){
    marker.on('click', function(evt) {  

        //resize all markers' icons to default size
        for (i=0;i<markersOfTheMap.length;i++) {
            resizeMarkerIcon(markersOfTheMap[i], false);
        }
              //map.closePopup();

        var infoBoxContent = buildInfoboxHtml(marker);

        marker.bindPopup(infoBoxContent, {className: 'click-popup'}, {closeOnClick: false});
        resizeMarkerIcon(marker, true);
        marker.openPopup();


        var popup = marker.getPopup(); // returns marker._popup
        popup._isOpen = true; 
        console.log("is popup open? " +popup._isOpen); // true
        popupsTestArray.push(popup); 
        console.log(popupsTestArray); // popup_isOpen is false...
           });

1 个答案:

答案 0 :(得分:1)

我也面临同样的问题。我在这里粘贴我的代码。希望它能帮助你解决问题。

marker.on('click', function (e) {
                            if (e.target._popup == undefined) { // same as e.target.getPopup()
                                $.getJSON(url, { entityObject: e.target.options.alt }, function (infoBoxContent ) { //e.target.options.alt contains entity Id from which we will get Infobox window content.
                                    e.target.bindPopup(infoBoxContent).openPopup();
                                });
                            }
                            else {
                                marker.openPopup();
                            }
                        });

在If条件下,我们从服务器端获取数据并将其绑定到标记弹出窗口。 在Else条件下,再次点击相同的标记后,我们将显示来自客户端的内容。

这段代码很好用。如果您有任何疑问,我们可以在这里讨论。