Эй.
У меня есть слой маркеров на моей карте.
Каждый раз, когда я добавляю новый маркер, я регистрирую его в событии щелчка мыши:
var lonlat = new OpenLayers.LonLat(lon,lat);
var marker = new OpenLayers.Marker(lonlat,icon);
marker.id = callId;
marker.events.register("mousedown", marker, function() {AddPopup(marker.id);});
callMarkers.addMarker(marker);
Иногда я хочу отключить / включить событие. поэтому я использую эти функции:
function EnableAllMarkers()
{
for (var i in callMarkers.markers)
{
callMarkers.markers[i].events.remove("mousedown");
callMarkers.markers[i].events.register("mousedown", callMarkers.markers[i],
function() { AddPopup(callMarkers.markers[i].id); });
}
}
function DisableAllMarkers()
{
for (var i in callMarkers.markers)
{
callMarkers.markers[i].events.remove("mousedown");
}
}
Когда я использую этот код, я получаю странное поведение - иногда открывается всплывающее окно для неправильного маркера.
Я нажимаю на маркер X и открывается всплывающее окно Y.
кто-нибудь может мне помочь, пожалуйста?
примечание:
Причина, по которой EnableAllmMarkers сначала удаляет событие, заключается в том, что мы не знаем, вызывался ли DisableAllmMarkers с момента добавления нового маркера. если он был вызван действительно, функция удаления ничего не сделает.