2013-04-12 31 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代碼執行最後console.log(lt1)

+2

什麼是「地點」? – Raptor

回答

1

這是因爲地圖加載異步。 「當地圖完全初始化(有邊界)時,它會觸發'init'事件。」 source

因此,您的第一個輸出是底部的console.log,其結果爲opp。稍後,映射被加載,並且init事件被觸發,執行回叫匿名函數。該函數使用定義的each循環進行迭代並輸出其結果。這就是爲什麼你會看到順序事件的順序。

如果您需要在init之後執行代碼,請考慮在init的回調函數中執行該代碼。

+0

感謝您的快速回復。我嘗試了以下回調,但它沒有奏效(我的意思是回撥)'$('#map_block')。gmap({'callback':function(){console.log(lt1);}' – Vikram