如何使用jQuery在OpenLayers中捕获click事件?

时间:2015-05-16 07:21:05

标签: jquery openlayers-3

我正在尝试捕获Attributions中的点击。我想改为显示一个模态窗口。

但正如您所见here,无论如何都会显示归属地。<​​/ p>

$(".ol-attribution").click(function() {
    alert("It's showing the attribution anyway");
    return false;
});

提前致谢!

2 个答案:

答案 0 :(得分:1)

问题的根源是,ol3点击处理程序在您尝试添加的处理程序之前执行,因此最好的方法是在添加自己的单击侦听器之前删除它。

因为ol3监听器是由Closure库添加的,所以不能用jQuery删除它,并且使用vanilla JS删除它是不必要的复杂,所以你最安全的选择是删除元素上的所有监听器。这可以通过以下方式完成(有点hacky,但我不知道更好的选择)代码片段(参见pseudo elements):

var btn = document.querySelector('.ol-attribution button');
var btnClone = btn.cloneNode(true);

btn.parentNode.replaceChild(btnClone, btn);

小提琴:Remove All Event Listeners of Specific Type

另一种方法是在扩展后立即折叠归因,因此从用户的角度来看,没有任何反应。 A(有点笨拙,但希望可读)在这里小提琴:http://jsfiddle.net/Kenny806/ds9em02a/

它在小提琴中有点不可靠,但在我的修改版本的ol3归因示例中工作正常。

答案 1 :(得分:1)

您是否仍需要归因控制功能?对我来说,似乎你只需要一个按钮,在点击时打开一个弹出窗口。也许创建一个自定义控件是有意义的,就像在这个example中一样。

请停用原始归因控制,将ol.control.defaults上的媒体资源attribution设置为false

var map = new ol.Map({
  controls: ol.control.defaults({
    attribution: false
  }).extend([
    new app.CustomControl()
  ]),