2013-04-12 2 views
2

Я пытаюсь выполнить цикл через набор и попытаться установить глобальную переменную в цикле. По какой-то причине цикл выполняется после завершения другого кода.jquery каждый не работает должным образом

Образец

Объявленный вне готовой функции

var lt1,lt2; 

Петля

lt1="opp"; 
$('#map_block').gmap().bind('init', function(ev, map) { 
    $.each(places,function(i, val) { 
     lt2 = val['h_longitude']; 
     lt1 = (val['h_latitude']); 
     clientPosition1 = new google.maps.LatLng(val['h_latitude'], val['h_longitude']); 
     console.log(lt1); 
     $('#map_block').gmap('addMarker', {'position': clientPosition1 , 'bounds': false, 'icon':hicon }).click(function() {$('#map_block'). gmap('openInfoWindow', {'content':' Test'}); 
    }); 
}); 
console.log(lt1); 

консолей показывает, как показано ниже

opp 
41.222 
42.4455 
43.5566 

Кажется, цикл выполняется Afte r выполнение кода последним console.log(lt1).

+2

Что такое «места»? – Raptor

ответ

1

Это потому, что карта загружается асинхронно. «Когда карта полностью инициализирована (с границами), она вызовет событие« init »». source

В результате ваш первый выход - это нижняя консоль.log, результатом которой является opp. В более позднее время карта будет загружена, а событие init будет запущено, выполняя анонимную функцию обратного вызова. Эта функция выполняет итерацию с использованием заданного цикла each и выводит результаты. Вот почему вы видите, что порядок событий трансформируется.

Если вам нужен код для выполнения после инициализации, рассмотрите возможность выполнения этого кода в функции, которая вызывается в обратном вызове init.

+0

Спасибо за быстрый ответ. Я попытался выполнить обратный вызов, но это не сработало (я имею в виду обратный вызов) '$ ('# map_block'). Gmap ({'callback': function() {console.log (lt1);}' – Vikram

Смежные вопросы