2011-03-09 22 views
3

我有一個OpenLayers地圖,有一個標記和一個彈出窗口,當我點擊標記時應該出現。這在IE8中正常工作,但在Firefox 3.6中不起作用。任何想法爲什麼?據我所知,由於我的日誌消息沒有出現,mousedown事件沒有被解僱。地圖是在http://ndinfo.heroku.com/test.html,我用它來創建標記和彈出代碼:OpenLayers popup沒有響應事件

function addMarker() { 
    var map = g_waze_map.map; 

    var markers1 = new OpenLayers.Layer.Markers("Markers1"); 
    g_waze_map.map.addLayer(markers1); 
    var size = new OpenLayers.Size(21,25); 
    var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); 
    var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png',size,offset); 
    var marker = new OpenLayers.Marker(new OpenLayers.LonLat(34.7934759272249, 32.0835554760902),icon); 

markers1.addMarker(marker); 
      marker.events.register('mousedown', marker, function(evt) { 
        console.log('hi'); 
        var popup = new OpenLayers.Popup.FramedCloud(null, 
             marker.lonlat, 
             null, 
             "<div style='background-color:red; width:150;height:100'>hi</div>", 

null,true,null); 

        map.addPopup(popup); 

        OpenLayers.Event.stop(evt); 

       }); 
} 

回答

3

here回答。關鍵是覆蓋OpenLayers.Control.ModifyFeature中的activate()函數。在創建標記之前我沒有意識到有任何控制會以任何方式影響標記,但事實證明它確實如此。

var shapes = new OpenLayers.Layer.Vector("Shapes"); 
map.addLayer(shapes); 
var modifyControl = new OpenLayers.Control.ModifyFeature(shapes, { 
     activate: function() { 
      var activated = false; 
      if(OpenLayers.Handler.prototype.activate.apply(this, arguments)) { 

       this.map.events.on({ 
        "removelayer": this.handleMapEvents, 
        "changelayer": this.handleMapEvents, 
        scope: this 
       }); 
       activated = true; 
      } 
      return activated; 
     } 
    }); 
+0

如果您添加ModifyFeature控制後層,你還需要重寫activate()嗎? – 2011-03-15 11:32:03

1

我認爲沒有任何「鼠標按下」事件相關聯。但OpenLayers.Markers可能有它。試試這個:

// Create your markers layer 
var markerLayer = new OpenLayers.Layer.Markers("Markers1"); 

// do whatever you want, and then... 

// Create your marker 
var marker = new OpenLayers.Marker(
     new OpenLayers.LonLat(34.7934759272249, 32.0835554760902), 
     icon); 

// Add your recently created marker to your markers layer 
markerLayer.addMarker(marker); 

// And bind 'mousedown' event to 'markers' layer, not to 'marker' object 
markerLayer.events.register('mousedown', markerLayer, function(evt) { 
    console.log('hi'); 
    var popup = new OpenLayers.Popup.FramedCloud(null,marker.lonlat,null, 
       "<div style='background-color:red; width:150;height:100'>hi</div>", 
       null,true,null); 
    map.addPopup(popup); 
    OpenLayers.Event.stop(evt); 
}); 

這裏是一個小例子:http://jsbin.com/ezeno3(點擊地圖上創建標記,然後點擊標記,打開一個彈出)。

我希望它有幫助。快樂編碼!

+0

但在你的例子中的實際代碼確實將事件綁定到marker:marker.events.register('mousedown',marker,function(evt){...});我嘗試了你的想法,目前似乎沒有幫助。感謝您的回覆! – Johnny 2011-03-10 23:24:57

+0

請指導此問題 - http://stackoverflow.com/questions/12470470/show-pop-up-box-on-google-map-sometime-it-didnt-show-it – Piraba 2012-09-18 05:58:13