【发布时间】:2015-08-02 00:57:55
【问题描述】:
我将不胜感激。现在我正在学习 Openlayers 3。我想将点击事件绑定到 for 循环中的多个地图对象。
当我这样做时,该事件仅应用于 for 循环中的最后一个地图对象:
for(var i = 0; i < $('.easymap').length;i++) {
// [...]
var elem = map[i];
elem.on('singleclick',function(evt){
elem.getView().setCenter(evt.coordinate);
});
}
我想我已经发现这是一个需要“关闭”的典型问题。但是,我还不知道如何做到这一点。
以下(愚蠢的)解决方法仅适用于给定数量的地图并产生许多冗余代码行,这只是一个临时解决方案:
// solve later (make dynamic, learn how to use closures... )
if($('#easymap1').length && $('#easymap1').hasClass('addpost')) map[0].on('singleclick',function(evt){ /*alert(ol.coordinate.format(evt.coordinate, '{x}')+' '+ol.coordinate.format(evt.coordinate, '{y}'));*/ map[0].getView().setCenter(evt.coordinate); });
if($('#easymap2').length && $('#easymap2').hasClass('addpost')) map[1].on('singleclick',function(evt){ map[1].getView().setCenter(evt.coordinate); });
if($('#easymap3').length && $('#easymap3').hasClass('addpost')) map[2].on('singleclick',function(evt){ map[2].getView().setCenter(evt.coordinate); });
if($('#easymap4').length && $('#easymap4').hasClass('addpost')) map[3].on('singleclick',function(evt){ map[3].getView().setCenter(evt.coordinate); });
if($('#easymap5').length && $('#easymap5').hasClass('addpost')) map[4].on('singleclick',function(evt){ map[4].getView().setCenter(evt.coordinate); });
那么,谁能告诉我如何将其集成到适当的 for 循环中?谢谢。
最好的问候 乔斯基81
【问题讨论】:
标签: jquery for-loop closures openlayers openlayers-3