Клуб API Карт

Почему не открывается балун при клике на ссылку меню и не задаются свойства геоколлекции?

Алекс _
12 ноября 2015, 10:17
карта
wander1.esy.es/yandexmap
Код js
ymaps.ready(function () {
    var myMap = new ymaps.Map('map', {
            center: [55.751574, 37.573856],
            zoom: 9,

            controls: []
        }, {
            searchControlProvider: 'yandex#search'
        });
var searchControl = new ymaps.control.SearchControl({
     options: {
         position: { left: 250, top: 50 },
         // float: 'right',
         floatIndex: 100,
         noPlacemark: true,
         left:50
             }
        });

 var myCollection = new ymaps.GeoObjectCollection();
    myCollection.options.set({
            iconImageHref: 'https://yastatic.net/morda-logo/i/arrow2/logo_simple.png',
            iconImageSize: [95, 37], // размеры картинки
            iconImageOffset: [-11, -30] // смещение картинки
        });
 
      



// Добавляем метки в коллекцию.
myCollection.add(new ymaps.Placemark([55.743517277269156,37.505507499999915], { id: 'n1', balloonContent: 'Офис «Багратионовская»'}));
myCollection.add(new ymaps.Placemark([55.64192027765163,37.52345549999994], { id: 'n2', balloonContent: 'Офис «Багратионовская»'}));
myCollection.add(new ymaps.Placemark([55.68452827749535,37.62410349999998], { id: 'n3', balloonContent: 'Офис «Багратионовская»'}));
myCollection.add(new ymaps.Placemark([55.42569577845532,37.545419499999944], { id: 'n4', balloonContent: 'Офис «Багратионовская»'}));
myCollection.add(new ymaps.Placemark([55.654568777603394,37.540532499999934], { id: 'n5', balloonContent: 'Офис «Багратионовская»'}));



myMap.controls.add(searchControl);

myMap.geoObjects.add(myCollection);
myMap.setBounds(myCollection.getBounds());

 // Ищем нужную метку и открываем/закрываем ее балун.
            function itemToggle(id) {
                var it = visible.getIterator(),
                    group;

                while(group = it.getNext()) {
                    for(var i = 0, len = group.getLength(); i < len; i++) {
                        var placemark = group.get(i);

                        if(placemark.properties.get('id') === id) {
                            if(placemark.balloon.isOpen()) {
                                placemark.balloon.close();
                            }
                            else {
                                myMap.panTo(placemark.geometry.getCoordinates(), {
                                    delay: 0,
                                    callback: function () {
                                        placemark.balloon.open();
                                    }
                                });
                            }
                            return;
                        }
                    }
                }
            }

});
9 комментариев

Где в этом коде вы слушаете клик на элементе меню?

$('li').on('click', function (e) {
// Отменяем основное поведение (переход по ссылке)
e.preventDefault();
$(this)
.toggleClass('active')
.siblings('.active')
.removeClass('active');
itemToggle(this.id);
});
 // Ищем нужную метку и открываем/закрываем ее балун.
            function itemToggle(id) {
                var it = myCollection.getIterator(),
                    group;

                while(group = it.getNext()) {
                    for(var i = 0, len = group.getLength(); i < len; i++) {
                        var placemark = group.get(i);

                        if(placemark.properties.get('id') === id) {
                            if(placemark.balloon.isOpen()) {
                                placemark.balloon.close();
                            }
                            else {
                                myMap.panTo(placemark.geometry.getCoordinates(), {
                                    delay: 0,
                                    callback: function () {
                                        placemark.balloon.open();
                                    }
                                });
                            }
                            return;
                        }
                    }
                }
            }

Этого кода нет по вашей ссылке.

Посмотрите этот пример

 

 

function itemToggle (id) {
for (var i = 0, len = myCollection.getLength(); i < len; i++)  {
var placemark = myCollection.get(i);
if (placemark.properties.get('id') === id) {
if (placemark.balloon.isOpen()) {
placemark.balloon.close();
} else {
myMap.panTo(placemark.geometry.getCoordinates(), {
delay: 0,
callback: function () {
placemark.balloon.open();
}
});
}
return;
}
}
}

  • Монумент
  • Этого кода нет по вашей ссылке.

    Uncaught ReferenceError: itemToggle is not defined

     

    Функция itemToggle не видна там где вы ее пытаетесь вызвать, посмотрите ссылку на пример которую я приводил выше

    нашел по этой ссылке пример http://ymapsapi.ya.ru/replies.xml?item_no=926 Подключение существующего меню к геообъектам на карте

    я пытаюсь  вызвать функцию из ссылки в html документе

     

    В приведенном вами примере аттрибуты onclick не используются.