0

openlayers のポップアップでクリック イベントを発生させようとしています。現在、機能にハードコードされた onclick を使用して実行しています。

    var vector = new OpenLayers.Layer.Vector("Points",{
            eventListeners:{
                'featureselected':function(evt){
                    var feature = evt.feature;
                    var popup = new OpenLayers.Popup.Anchored("popup",
                        OpenLayers.LonLat.fromString(feature.geometry.toShortString()),
                        new OpenLayers.Size(275,71),
                        '<div id="pincontent" onclick="pindetails()"><h3>' + feature.attributes.title +'</h3><div style="display: none;" id="pindescription">'+  feature.attributes.content +'</div></div>',
                        null,
                        false
                    );
                    popup.imageSrc = 'img/popup.png';
                    popup.autoSize = false;
                    popup.backgroundColor = 'transparent';
                    var offset = {'size':new OpenLayers.Size(0,0),'offset':new OpenLayers.Pixel(-74,-10)};
                    popup.anchor = offset;
                    popup.panMapIfOutOfView = true;
                    popup.imageSize = new OpenLayers.Size(275,71);
                    popup.relativePosition = "br";
                    popup.calculateRelativePosition = function () {
                         return 'tr';
                    };
                    feature.popup = popup;
                    map.addPopup(popup);
     //adding event listener
                    map.events.register('mousedown', popup, function(evt){alert('help')}, false);
                },
                'featureunselected':function(evt){
                    var feature = evt.feature;
                    map.removePopup(feature.popup);
                    feature.popup.destroy();
                    feature.popup = null;
                }

            }
        });

しかし、メインの OpenLayers div がクリックをインターセプトしているため、2 回クリックする必要があります。これを無効にする方法があるかどうかはわかりません。openLayers のドキュメントを見てきましたが、API を使用して機能をクリックするためのイベント リスナーを追加する方法がわかりません。

4

2 に答える 2

2

おそらくreturn false;、onclick で関数呼び出しの後に追加して、イベントの伝播を停止する必要があります (これがデフォルトです)。register メソッドも見てください。

this.map.events.register('click', this.map, function handleMapClick(e) { ... }

http://dev.openlayers.org/releases/OpenLayers-2.6/doc/apidocs/files/OpenLayers/Events-js.html#OpenLayers.Events.register

于 2013-02-06T13:32:27.317 に答える
0

evt.stopPropagation();うまくいかないようです。ただしreturn true;singleclickイベント ハンドラーで を使用すると、Event-Propagationがカスケード レイヤーに浸透するのを防ぐことができます。

于 2019-06-16T15:18:08.200 に答える