Javascript events.register自动执行正在注册的事件
我试图为每个标记添加一个弹出窗口(我使用OpenLayers和OpenStreetMaps)。每个标记正在注册一个事件“单击”,该事件将显示其相应的弹出窗口 但是,它只是在启动时执行所有弹出窗口,而不是等待给定的标记单击 大约有1000个标记,因此我使用此循环填充标记和弹出窗口(创建时隐藏): 这是在执行时为所有标记自动触发的函数:Javascript events.register自动执行正在注册的事件,javascript,openlayers,openstreetmap,Javascript,Openlayers,Openstreetmap,我试图为每个标记添加一个弹出窗口(我使用OpenLayers和OpenStreetMaps)。每个标记正在注册一个事件“单击”,该事件将显示其相应的弹出窗口 但是,它只是在启动时执行所有弹出窗口,而不是等待给定的标记单击 大约有1000个标记,因此我使用此循环填充标记和弹出窗口(创建时隐藏): 这是在执行时为所有标记自动触发的函数: function PopupsShow(i) { map.popups[i].show(); }; 我错过了什么。为什么popupshow函数在执行时启
function PopupsShow(i) {
map.popups[i].show();
};
我错过了什么。为什么popupshow函数在执行时启动,而不是等待单击标记。我一直在四处寻找答案,但似乎没有任何帮助
谢谢 我已经弄明白了:
我们无法使用marker.events.register(“单击”,marker,PopupsShow(i))
相反,我们需要这样称呼它:marker.events.register(“单击”,marker,popupshow)
既然我们需要i
,我们可以这样称呼它:
marker.events.register("click", marker, function () {
map.popups[i].show();
});
事件处理程序实际上可以获取一个参数(事件),这是执行此操作的惯用方法。此外,最好将处理程序绑定到一个层,而不是每个标记
markerLayer.events.register('click', marker,
function(event) {
var feature = event.feature;
/* make popup appear */
});
制作弹出窗口的方式因您的需要而有所不同,但通常在此处按需创建弹出窗口,而不是预生成和调用show
marker.events.register("click", marker, function () {
map.popups[i].show();
});
markerLayer.events.register('click', marker,
function(event) {
var feature = event.feature;
/* make popup appear */
});