FramedCloudポップアップがポップアップ内のクリックイベントを盗むのはなぜですか?
current_popup = new OpenLayers.Popup.FramedCloud(
"featurePopup",
f.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(0,0),
"<b>Наблюдения</b><br/>" + $.map(features, function(fe) { return fe.attributes.description; }).join('<br/>'),
null, false, null);
map.addPopup(current_popup, true);
$('#map').on('click', function() { console.log('test'); return false; });
ポップアップ内のリンクをクリックする場合を除いて、常にクリックイベントをキャプチャします。ポップアップとアンカーはの子孫です#map
。
- マップをクリック=>コールバックが発生します
- マーカーをクリック=>コールバックが発生し、ポップアップが表示されます
- ポップアップ内をクリックします(リンク上ではありません)=>コールバックは発生しません
- ポップアップ内のリンクをクリック=>同じように、何も起こりません
OLのその部分のコードは非常にあいまいです。
ポップアップ内のクリックをキャッチするのはなぜですか?どうすればそれらを取り戻すことができますか?
編集:OLのより深いデバッグ:この関数が起動されます:
bindAsEventListener: function(func, object) {
return function(event) {
return func.call(object, event || window.event);
};
event.target
アンカーです、まさに私が期待するものです:
<a class="edit-card-link" href="/form/?id=806">...</a>
func
は:
handleBrowserEvent: function(evt) {
var type = evt.type, listeners = this.listeners[type];
if (!listeners || listeners.length == 0) {
return;
}
var touches = evt.touches;
if (touches && touches[0]) {
var x = 0;
var y = 0;
var num = touches.length;
var touch;
for (var i = 0; i < num; ++i) {
touch = touches[i];
x += touch.clientX;
y += touch.clientY;
}
evt.clientX = x / num;
evt.clientY = y / num;
}
if (this.includeXY) {
evt.xy = this.getMousePosition(evt);
}
this.triggerEvent(type, evt);
}
this
OpenLayers.Eventクラスのインスタンスでevt.target
あり、それでもそのアンカーであり、listeners
1つのリスナーが含まれています。
function (evt){OpenLayers.Event.stop(evt,true);}
これが理由ですか?どうやって取り出すの?