OpenLayers event.register没有注册

And*_*sen 5 openlayers

好的,我是OpenLayers的菜鸟.我遇到的问题是......

在我的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); });
Run Code Online (Sandbox Code Playgroud)

我正在撞墙,如果我不是秃头,我会把头发拉出来.有人有主意吗?

And*_*sen 10

谢谢大家的帮助.问题是(并且OL文档非常可悲,因此它没有在任何地方说明这一点)它与创建图层的顺序有关.在我的代码中,我遍历一个图层名称数组,我正在为每个名称创建一个标记图层和一个矢量图层.我尝试先创建标记图层,然后再创建矢量图层,它具有相同的点击瘫痪效果.所以我尝试循环一次以创建所有矢量图层.循环再次创建标记图层并且工作正常.

OL是一个很棒的地图系统.他们的文档很差,真是太遗憾了.样品几乎没用.如果OL是这样一个社区驱动的东西,为什么没有OL论坛?我不得不来这里,因为它似乎是唯一一个OL用户做任何发布的地方.


Fra*_*ona 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!');
});
Run Code Online (Sandbox Code Playgroud)

注册函数的第二个参数应该是要绑定事件的对象。我一直记得 OpenLayers.Map 对象的鼠标悬停事件的示例:

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

我希望它对你有帮助。快乐编码!