2011-02-23 51 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”