2015-05-16 2 views
0

Я пытаюсь захватить щелчок в атрибутах. Вместо этого я хочу показать модальное окно.Как захватить событие click в OpenLayers с помощью jQuery?

Но, как вы можете видеть, here, он все равно показывает атрибуцию.

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

Заранее благодарен!

ответ

1

Корень проблемы состоит в том, что обработчик ol3-кликов выполняется перед обработчиком, который вы пытаетесь добавить, поэтому, вероятно, лучший способ - удалить оригинальный прослушиватель кликов перед добавлением собственного.

Поскольку слушатель ol3 добавлен библиотекой Closure, его нельзя удалить с помощью jQuery и излишне сложно удалить с помощью vanilla JS, поэтому ваша самая безопасная ставка - просто удалить всех слушателей на элементе. Это можно сделать с помощью следующих (немного Hacky, но я не знаю лучшей альтернативы) кусок кода (см Remove All Event Listeners of Specific Type):

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

btn.parentNode.replaceChild(btnClone, btn); 

Fiddle: http://jsfiddle.net/Kenny806/ds9em02a/

Другой способ заключается в развалился атрибуция, как только она расширяется, поэтому с точки зрения пользователя ничего не происходит. A (бит неуклюжий, но, надеюсь, читаемый) скрипка здесь: http://jsfiddle.net/Kenny806/udpdohqg/1/

Это работает немного нерегульно в скрипке, но отлично работает в моей модифицированной версии примера атрибутов ol3.

1

Вам все еще нужна функциональность элемента управления атрибуцией? Для меня кажется, что вам нужна только кнопка, которая открывает всплывающее окно при нажатии. Возможно, было бы целесообразно создать настраиваемый элемент управления, например, в этом example.

Отключите первоначальный контроль над атрибуцией, установите свойство attribution на ol.control.defaults на false.

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