【问题标题】:How can I prevent a popup to show when clicking on a marker in Leaflet?单击 Leaflet 中的标记时,如何防止显示弹出窗口?
【发布时间】:2014-10-29 18:55:18
【问题描述】:

我想要一个在我单击传单标记时不显示的弹出窗口。我不能使用clickable : false,因为它会使标记“充当底层地图的一部分”,这对我来说是不可接受的。我尝试了以下代码:

marker.on('click', function(event) {
  event.originalEvent.preventDefault();
});

没有任何结果。在不使用标记对象的clickable : false 属性的情况下,防止弹出窗口显示的正确方法是什么?

我只需要通过单击一个自定义按钮来打开地图上的所有弹出窗口,但我不希望弹出窗口在我单击特定标记后显示出来。

【问题讨论】:

    标签: javascript leaflet


    【解决方案1】:

    只需从标记的点击事件中删除openPopup

    marker.bindPopup('My popup!');
    marker.off('click', this.openPopup);
    

    【讨论】:

    • 这对我来说非常有效。虽然我不得不使用“隐藏”方法_openPopup而不是“公共”openPopup,并且引用对象应该是marker而不是this
    【解决方案2】:

    只是不要将弹出窗口绑定到标记。这是带有 2 个标记的 fiddle。一个有弹出窗口,另一个没有。

    L.marker([51, 0]).bindPopup("this is a popup").addTo(map);
    
    L.marker([51, 1.5]).addTo(map);
    

    编辑: 我已经编辑了fiddle 并认为这可能是您要问的。这是代码的重要部分:

    function onClick(event) {
        event.target.closePopup();
    }
    

    【讨论】:

    • 我想这对我来说不是这样,因为我仍然需要弹出窗口。我只需要通过单击一个自定义按钮打开地图上的所有弹出窗口,但我仍然不希望在单击特定标记后弹出弹出窗口。
    • 仅供参考,event.target.closePopup(); 不适用于当前版本的传单。如果您可以将地图作为全局变量访问,则可以改为使用map.closePopup();
    【解决方案3】:

    试试这个解决方法:

    marker.bindPopup('my popup content');
    
    // remove openPopup click handler (actually all click handlers)
    marker.off('click');
    
    // Do nothing on click. This is not necessary, but now marker
    // doesn't act like part of underlying map
    marker.on('click', function() {return;});
    

    详情请见plunker

    【讨论】:

      【解决方案4】:

      其他答案都不适合我(可能是因为更新版本的 Leaflet)。我最终跳过了marker.bindPopup(),只使用L.popup()单独创建弹出窗口,然后在我需要它们出现时调用map.openPopup(thePopup)

      类似这样的:

      var map = L.map(),
          popup = L.popup().setContent("Stuff"),
          marker = L.marker();
      popup.setLatLng(marker.getLatLng());
      
      // In my event handler
      map.openPopup(popup);
      

      【讨论】:

        【解决方案5】:

        添加返回 false 。它应该工作。虽然我不是很确定。

        marker.on('click', function(event) {
          event.originalEvent.preventDefault();
          return false;
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-16
          • 2015-06-27
          • 1970-01-01
          • 1970-01-01
          • 2012-08-10
          • 1970-01-01
          相关资源
          最近更新 更多