Вы объявляете переменную map
без ключевого слова var
, поэтому она создается в глобальной области видимости, поэтому существует только одна переменная map
, которая получает значение, перезаписанное в каждом цикле.
for(var k=0;k<arr_altern.length;k++){
(function (k) {
my_div=create_div_interchange(arr[i],1,78,visited_bus,interchange_arr,arr_altern[k],null, my_interchange_array);
$('#results').append(my_div);
var x = 'animate' + div_id,
v = '#animater' + div_id,
map = create_map(div_id),
poly = retrieve_results_edges(bus_stops_visited, map),
strVar = '<span class="animate"><input type="button" id="' + x + '" name="animate" value="Animate" /><\/span>';
$(v).append(strVar);
document.getElementById(x).onclick=function test(){
animate(poly,map);
}
set_map(map);
set_polyline_color(my_traversed_edge,map);
})(k);
}
Выполнение вашего кода внутри IIFE (выражение вызова с немедленным вызовом) создаст новую область видимости для кода внутри него. Это позволяет вам объявлять переменные во время выполнения, и они сохранят свое значение в будущем (например, они будут доступны обработчикам событий, которые сработают в будущем). Обратите внимание, что я использовал ключевое слово var
при объявлении всех переменных, чтобы они были созданы в текущей области.
Обновление
Вы также можете использовать $.each()
для определения кода:
$.each(arr_altern, function (k, val) {
my_div=create_div_interchange(arr[i],1,78,visited_bus,interchange_arr,arr_altern[k],null, my_interchange_array);
$('#results').append(my_div);
var x = 'animate' + div_id,
v = '#animater' + div_id,
map = create_map(div_id),
poly = retrieve_results_edges(bus_stops_visited, map),
strVar = '<span class="animate"><input type="button" id="' + x + '" name="animate" value="Animate" /><\/span>';
$(v).append(strVar);
document.getElementById(x).onclick=function test(){
animate(poly,map);
}
set_map(map);
set_polyline_color(my_traversed_edge,map);
});