Как при нажатии на маркер убрать ошибку?

Помогите пожалуйста. Уже совсем замучился. Уже пол дня в пустую потратил.

При нажатии на маркер выдаёт ошибку Uncaught TypeError: Cannot read property 'content' of undefined
Вот пример живой код https://jsfiddle.net/9c9bovnx/3/

var map = new google.maps.Map(document.getElementById('map'),{
    center: {
        lat: 50.42497789999999,
        lng: 30.459857599999964
    },
    zoom: 10
});

var myBubles = {
    "markers" : [
        {
            "id" : 1,
            "title" : "title",
            "content" : "<div id=\"content\"><div id=\"siteNotice\"></div><h1 id=\"firstHeading\" class=\"firstHeading\">Заголовок</h1><div id=\"bodyContent\"><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Первая строка</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Вторая строка</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Третья строка</p></div></div>",
            "lat" : 50.42497789999999,
            "lng" : 30.459857599999964,
            "inner_title" : "Заголовок маркера"
        },{
            "id" : 2,
            "title" : "title",
            "content" : "<div id=\"content\"><div id=\"siteNotice\"></div><h1 id=\"firstHeading\" class=\"firstHeading\">Заголовок 2</h1><div id=\"bodyContent\"><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Первая строка 2</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Вторая строка 2</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Третья строка 2</p></div></div>",
            "lat" : 50.508021165218466,
            "lng" : 30.60405315664059,
            "inner_title" : "Заголовок маркера 2"
        }
    ]
};

console.log(myBubles.markers[0].content);

for(var i = 0; i < myBubles.markers.length; i++){

    var markers = [];

    markers[i] = new google.maps.Marker({
        position: { lat: myBubles.markers[i].lat, lng: myBubles.markers[i].lng },
        map: map,
        title: myBubles.markers[i].inner_title
    });

    markers[i].addListener('click', function() {
        new google.maps.InfoWindow({ content: myBubles.markers[i].content }).open(map, markers[i]);
    });

}


За качество кода не ругайте - с JS работаю очень редко.
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
@denchik_bubenchik
Попробуй так:

var map = new google.maps.Map(document.getElementById('map'),{
        center: {
            lat: 50.42497789999999,
            lng: 30.459857599999964
        },
        zoom: 10
    });

    var myBubles = {
        "markers" : [
            {
                "id" : 1,
                "title" : "title",
                "content" : "<div id=\"content\"><div id=\"siteNotice\"></div><h1 id=\"firstHeading\" class=\"firstHeading\">Заголовок</h1><div id=\"bodyContent\"><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Первая строка</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Вторая строка</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Третья строка</p></div></div>",
                "lat" : 50.42497789999999,
                "lng" : 30.459857599999964,
                "inner_title" : "Заголовок маркера"
            },{
                "id" : 2,
                "title" : "title",
                "content" : "<div id=\"content\"><div id=\"siteNotice\"></div><h1 id=\"firstHeading\" class=\"firstHeading\">Заголовок 2</h1><div id=\"bodyContent\"><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Первая строка 2</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Вторая строка 2</p><p><i class=\"fa fa-phone\" aria-hidden=\"true\"></i> Третья строка 2</p></div></div>",
                "lat" : 50.508021165218466,
                "lng" : 30.60405315664059,
                "inner_title" : "Заголовок маркера 2"
            }
        ]
    };
		
     myBubles.markers.forEach(function(elem, index){
    		var marker = new google.maps.Marker({
            position: { lat: elem.lat, lng: elem.lng },
            map: map,
            title: elem.inner_title
        });
        marker.addListener('click', function() {
            new google.maps.InfoWindow({ content: elem.content}).open(map, marker);
        });
     });


https://jsfiddle.net/9c9bovnx/5/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Потому что i во время срабатывания события вовсе не то, что было.
Попробуйте нечто такое:
var marker = markers[i];
markers.addListener('click', function() {
        new google.maps.InfoWindow({ content: marker.content }).open(map, marker);
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы