Клуб API Карт

Несколько карт на странице - не отображаются в Хроме.

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

Подскажите пожалуйста, почему, если карт на странице несколько, то в Хроме и IE отображается только самая последняя. Вот пример. http://www.smehnakarte.ru/category/drugie-strany/ukraina/

В Файрфокс и Опере нормально всё отображается.

Спасибо за ответ!

15 комментариев
Sergey Konstantinov
28 января 2016, 06:49
В JavaScript все объекты, объявленные вне функций, являются глобальными.


var map = new YMaps.Map(document.getElementById("map_2"));

               
var geocoder = new YMaps.Geocoder("село Коноплянка Украина, Полтавская область, Великобагачанский район", {results: 1, boundedBy: map.getBounds()});

У вас на странице все карты используют одну и ту же переменную map и один и тот же экземпляр геокодера.

Оберните в анонимную функцию, например.

(function () {
   var map = ...
   ...
})();
Алексей Крылышкин
28 января 2016, 06:49
Я обернул как вы сказали, но карты вообще перестали показываться. Что не так?


(function () {    
            var map = new YMaps.Map(document.getElementById("map_2"));

                       
                var geocoder = new YMaps.Geocoder("село Коноплянка Украина, Полтавская область, Великобагачанский район", {results: 1, boundedBy: map.getBounds()});
    })();
Sergey Konstantinov
28 января 2016, 06:49
Ну так надо все внутри
Алексей Крылышкин
28 января 2016, 06:49
Подскажите, пожалуйста, как это сделать, я не сильно разбираюсь в программировании.
Sergey Konstantinov
28 января 2016, 06:49
Ну у вас там на каждую карту:


var map = new YMaps.Map(document.getElementById("map_1"));
               
// тут много кода
// ...

map.addControl(new YMaps.ScaleLine());

Нужно обернуть в анонимную функцию:

(function () {

var map = new YMaps.Map(document.getElementById("map_1"));
               
// тут много кода
// ...

map.addControl(new YMaps.ScaleLine());

})();
Алексей Крылышкин
28 января 2016, 06:49
Большое спасибо! Теперь всё работает.
не совсем понял, обьясните пожалуйста так сказать на пальцах!:-(
Sergey Konstantinov
28 января 2016, 06:49
А Вы уверены, что у Вас та же проблема?
Дайте пример страницы.
http://franmerpools.ru/contacts/ - в ие не открывается, хотя в мозилле, опере, сафари всё типтоп!
в хроме тоже всё замечательно работает.
Sergey Konstantinov
28 января 2016, 06:49
Попробуйте открывать карту сразу в нужной точке.

map = new YMaps.Map( document.getElementById("YMapsID") );
map.setCenter(new YMaps.GeoPoint(37.572356,55.68625), 17, YMaps.MapType.MAP);map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.Zoom());
var placemark=new YMaps.Placemark(new YMaps.GeoPoint(37.572356,55.68566));
placemark.setIconContent('');
map.addOverlay(placemark);
placemark.openBalloon('

Академическая
ул.Профсоюзная, д.3, офис 206

');
        map.redraw();
};

Т.е. вместо первой пары координат писать вторую.
корду указаны специально для того чтобы было видно метро, так сказать отправная точка маршрута.

ни map.redraw(); ни map.update(); не помогает ((((
нашел другой вариант, не мой код, малёк подретуширован! работает во всех браузеерах:


Рекомендую поставить firebug, там есть вывод информации об ошибках и интерактивная консоль
Sergey Konstantinov
28 января 2016, 06:49
А нет ошибки-то :) В том и юмор.
Просто N раз перезаписана пара глобальных переменных.