Клуб API Карт

Привязка события к массиву меток

Пост в архиве.

Добрый день.

Добавил на карту метки массивом и хочу привязать событие к меткам. Но ничего неполучается. Что я делаю не так?

<script type="text/javascript">
var map;
window.onload = function () {
map = new YMaps.Map(document.getElementById("maprt"));
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.SearchControl());

map.setCenter(new YMaps.GeoPoint(30.497516,50.456819), 11);
var placemark = new Array();
placemark[0] = new YMaps.Placemark(new YMaps.GeoPoint(30.536791,50.402444));
 map.addOverlay(placemark);

YMaps.Events.observe(placemark, placemark.Click, function () {
alert("Щелк!");
});

YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
var myHtml = "Значение: " + mEvent.getGeoPoint() + " на масштабе " + map.getZoom();
map.openBalloon(mEvent.getGeoPoint(), myHtml);
});

}

</script>

 

3 комментария
Александр Новиков
28 января 2016, 06:34
Вот это кусочек вызывает ряд вопросов

YMaps.Events.observe(placemark, placemark.Click, function () {
            alert("Щелк!");
        });

Если ставите обработчик на метку, которая хранится в массиве, то и надо указаывать непосредственно эту метку, а не весь массив.
Это чисто логика и знание основ JavaScript.

И второй момент связан с документацией на API. Как-то подозрительно неправильно указан тип события.

Можно попробовать вот такой код
YMaps.Events.observe(placemark[0], placemark.Events.Click, function () {
            alert("Щелк!");
        });
Не самый изящный метод массового задания меток и обработчиков к ним, но работает !
Результат смотреть на карте Питера (10 меток).

 group = new YMaps.GeoObjectCollection();
 for (var i = 0; i < 10; i++) {
 placemark = new YMaps.Placemark(new YMaps.GeoPoint(30+i*0.1, 60));
 YMaps.Events.observe(placemark, placemark.Events.Click, function () { alert("Щелк!"); });
 group.add(placemark);
 map.addOverlay(group);
 };
Не совсем хорошо группу добавлять в цикле каждый раз. Ее нужно добавить до цикла один раз.

Я бы посоветовал определить функцию по созданию меток:

function createPlacemark (geoPoint) {
    var placemark = new YMaps.Placemark(geoPoint);
    YMaps.Events.observe(placemark, placemark.Events.Click, function () { alert("Щелк!"); });
    return placemark;
}

А потом ее использовать в цикле:

var group = YMaps.GeoObjectCollection();
map.addOverlay(group);
for (var i = 0; i < 10; i++) {
    group.add(createPlacemark(new YMaps.GeoPoint(30+i*0.1, 60)));
}