Ничего сразу не выскакивает как неправильное, похоже, это должно быть правильно.
Можете ли вы установить JS Fiddle, демонстрирующую проблему вообще?
Моим первым предположением будет то, что ваш код верен, но каким-то образом вы получаете недопустимые данные в массиве местоположений.
Если это не так, мне интересно, если это проблема с вложением и переменными.Может помочь что-то вроде этого:
for (var i = 0; i < locations.length; i++) {
var location = locations[i];
$('#loc'+i).click(function() {
map.panTo(location);
map.setZoom(12);
});
}
Сначала я объявил переменную "i", специфичную для каждого цикла, поэтому нет способа, чтобы он мог быть неправильно перезаписан где-то еще.Я также добавил дополнительный «отказоустойчивый» способ определения переменной «location» в каждой итерации цикла, чтобы вы могли убедиться, что в функцию click внесена правильная переменная.
EDIT Определенно проблема с вложением и переменным содержимым при доступе через клик.Еще можно попробовать следующее:
1: добавить общий класс для каждой кнопки, что-то вроде class = "locButton"
2: Попробуйте это:
$(".locButton").each(function(){
$(this).click(function(){
var locId = parseInt($(this).attr('id').replace('loc',''));
map.panTo(locations[locId]);
map.setZoom(12);
});
});