单击 Leaflet 地图关闭模式,单击标记打开模式

Click on Leaflet map closes modal, click on marker opens modal

我的传单地图有打开模式的标记。

但是,当用户单击地图时,我希望模式关闭。但是实现这一点的代码(如下)与标记交互,并强制它在打开时立即关闭:

map.on('click', function(e) {
$('.modal').modal('hide'); });

我确实让它起作用了——请看这里的 JSFiddle:https://jsfiddle.net/askebos/Lh1y12uq/

但如您所见,它似乎正常工作的唯一原因是它会产生以下错误:

Uncaught TypeError: e.preventDefault is not a function.

我想这是因为 map.on('click'...) 函数被阻止执行。

关于如何在没有错误的情况下实现相同的行为有什么想法吗?

解决方案是添加一个 init() 函数,在单击标记时进行跟踪。灵感来源于此question.

首先,将 init() 函数添加到您的代码中:

function init() {
    init.called = true;
}

然后在点击标记时调用函数:

function markerOnClick(e) {
  init();
...
}

制作一个在点击地图时触发的函数,但包含一个 if/else 语句来检查 init.called 是否已设置为 true。如果是这种情况,请重置 init.called。如果未设置为 true,则在其他地方单击了地图,任何模式都可能关闭。

function mapClick () {
if(init.called) {
    init.called = false;
}
else{
  $('.modal').modal('hide');
}
}

最后绑定mapClick函数映射点击。

map.on('click', mapClick);

该功能将不再覆盖标记点击,错误也已解决。这仍然没有告诉我为什么 e.preventDefault 导致错误,所以欢迎任何解释!

可以在这里找到一个有效的 JSFiddle:https://jsfiddle.net/askebos/oesh59jr/