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