Javascript events.register自动执行正在注册的事件

Javascript events.register自动执行正在注册的事件,javascript,openlayers,openstreetmap,Javascript,Openlayers,Openstreetmap,我试图为每个标记添加一个弹出窗口(我使用OpenLayers和OpenStreetMaps)。每个标记正在注册一个事件“单击”,该事件将显示其相应的弹出窗口 但是,它只是在启动时执行所有弹出窗口,而不是等待给定的标记单击 大约有1000个标记,因此我使用此循环填充标记和弹出窗口(创建时隐藏): 这是在执行时为所有标记自动触发的函数: function PopupsShow(i) { map.popups[i].show(); }; 我错过了什么。为什么popupshow函数在执行时启

我试图为每个标记添加一个弹出窗口(我使用OpenLayers和OpenStreetMaps)。每个标记正在注册一个事件“单击”,该事件将显示其相应的弹出窗口

但是,它只是在启动时执行所有弹出窗口,而不是等待给定的标记单击

大约有1000个标记,因此我使用此循环填充标记和弹出窗口(创建时隐藏):

这是在执行时为所有标记自动触发的函数:

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 */
  });