2011-02-23 48 views
5

好吧我是OpenLayers的noob。我有這個問題是...OpenLayers event.register沒有註冊

在我的JavaScript中,初始化地圖後,添加基本OSM圖層和居中,我的代碼做了一個標記點​​的ajax查找添加到地圖,所有標記是分組的,所以它爲每個組創建一個新層,並將標記添加到組層。但是,在將標記添加到圖層之前,它會使用簡單的警報功能執行mousedown的事件註冊。

這裏的問題是,當我點擊一個標記時,光標就會變成一隻手,就像它認爲我想拖動地圖一樣。就像上面有一些其他圖層可以阻止點擊。我嘗試了控制檯日誌記錄,而不是提醒,只是爲了確保它不會實際觸發事件點擊。這是很難做一個代碼示例,將顯示代碼的全貌,但這裏有一個片段:

function createMarker(lat, lon) { 
    var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10)); // this is a custom image 
    lonlat = new OpenLayers.LonLat(lon, lat); 
    var marker = new OpenLayers.Marker(lonlat, icon.clone()); 
    return marker; 
} 

marker = createMarker(lat,lon,'Example Title'); 
marker.events.register('mousedown', pin, function(evt) { alert('help!'); OpenLayers.Event.stop(evt); }); 

我打在牆上,如果我不是禿頭,我會出去拉我的頭髮。有人有主意嗎?

+0

添加一個鏈接我的答案。 – 2011-03-23 15:14:24

回答

4

試試這個:

function createMarker(lat, lon) { 
    var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10)); 
    lonlat = new OpenLayers.LonLat(lon, lat); 
    var marker = new OpenLayers.Marker(lonlat, icon.clone()); 
    return marker; 
} 

marker = createMarker(lat,lon,'Example Title'); 
marker.events.register('mousedown', marker, function(evt) { 
    alert('help!'); 
}); 

寄存器功能的第二個參數應該是要綁定事件對象。我總是想到OpenLayers.Map對象的mouseover事件的例子:

map = new OpenLayers.Map('divmap'); 
map.events.register('mouseover', map, function(evt) { 
    // Do stuff 
}); 

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

4

也許你應該看看層事件。我假設你正在使用矢量圖層來表示你的觀點?在這種情況下,請查看有關事件處理的Vector layer documentation

有不同的圖層,應該接收鼠標事件應該工作。

另外,請看OL頁面上的this sample

對不起,如果我說明顯,你已經嘗試過。

編輯:

從你的答案,你可能想看看this question,我問,後來與一個OL黑客回答實現。也許你可以從中汲取一些東西。

10

感謝您的幫助。問題是(和OL文檔是可悲的可憐的,所以它不會在任何地方說明),它與您創建圖層的順序有關。在我的代碼中,我循環了一個圖層名稱數組,並且爲每個名稱創建了一個標記圖層和一個矢量圖層。我首先創建了標記圖層,然後創建了矢量圖層,並且它具有相同的單擊殘缺效果。所以我試着循環一次,先創建所有的矢量圖層。通過再次循環並創建標記圖層,並工作。

OL是一個很棒的測繪系統。他們擁有如此糟糕的文檔,真是令人遺憾。樣品幾乎沒用。如果OL是這樣的社區驅動的東西,爲什麼沒有OL論壇?我不得不來這裏,因爲它似乎是OL用戶做任何發佈的唯一地方。

+1

http://osgeo-org.1560.n6.nabble.com/OpenLayers-Users-f3910695.html – tomfumb 2012-05-17 16:40:43

2

我有同樣的問題,我想我找到了解決辦法:

看看這個: Capture feature events on different layers

的問題似乎是,你不能在同一時間收聽不同層上不同的事件,你只能在活動層做。

PS:我沒有嘗試,但...

2

簡單的方法,使其:

map.events.listeners.mousedown.unshift({ 
    func: function(){ 
     alert('hola muheres'); 
    } 
}); 

你想要的,而不是僅僅替補事件 「的mousedown」