2013-09-24 44 views
1

我希望有人可以用我的Google Maps API代碼來幫助我。谷歌地圖 - 無法讀取未定義的屬性'__e3_'

我已經設置了一個有多個標記的地圖,但是我想爲標記添加點擊事件,這樣就會出現一個信息窗口,這是我遇到問題的地方。

$(document).ready(function() { 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=true&callback=mapInitialize"; 
    document.body.appendChild(script); 
}); 
function mapInitialize() { 
    var options = { 
     zoom: 5, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map_div'), options); 
    geocoder = new google.maps.Geocoder(); 
    function codeAddress(markerValue, addressValue) { 
     geocoder.geocode({ 'address': addressValue}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       map.setCenter(results[0].geometry.location); 
       markerValue = new google.maps.Marker({ 
        map: map, 
        position: results[0].geometry.location 
       }); 
      } 
     }); 
    } 
    var marker1; 
    codeAddress(marker1, '1 My Road, Somewhere, A1 1AA'); 
    var infowindow1 = new google.maps.InfoWindow({ 
     content: '<div class="infowindow"><strong><a href="http://mylink.com">Title</a></strong><br />Address details</div>' 
    }); 
    google.maps.event.addListener(marker1, 'click', function() { 
     infowindow1.open(map, marker1); 
    }); 
} 

所以我得到的錯誤「無法讀取屬性‘_ ’未定義」 E3當我包括的addListener代碼。

我已閱讀過類似問題的其他帖子,但我已閱讀所有回覆,即使它們具有相同的問題,沒有任何適用於他們的解決方案適用於我,或者它們與這是我寫的。

在此先感謝。

回答

2

這裏有多種問題:

  1. 你試圖通過分配與參數name markerValue修改marker1變量傳遞到您的codeAddress函數從函數中。 JavaScript沒有傳遞引用參數,因此marker1不會受到您爲markerValue賦值的任何影響。因此,稍後當您嘗試使用marker1執行某些操作時,它仍然具有其默認值(undefined)。

  2. 谷歌地圖的API是異步。你的電話geocoder.geocode開始的過程,但它在晚些時候完成,很久後codeAddress已經返回。

您需要將您的後續代碼codeAddress,具體到從geocode完成回調。

東西像這樣(沒有經過充分測試,這個想法是你指出正確的方向,而不是爲你編寫一個完美的解決方案):

function mapInitialize() { 
    var options = { 
     zoom: 5, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map_div'), options); 
    geocoder = new google.maps.Geocoder(); 
    function codeAddress(addressValue) { 
     geocoder.geocode({ 'address': addressValue}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       var marker, infowindow1; 

       map.setCenter(results[0].geometry.location); 
       marker = new google.maps.Marker({ 
        map: map, 
        position: results[0].geometry.location 
       }); 

       infowindow = new google.maps.InfoWindow({ 
        content: '<div class="infowindow"><strong><a href="http://mylink.com">Title</a></strong><br />Address details</div>' 
       }); 
       google.maps.event.addListener(marker, 'click', function() { 
        infowindow.open(map, marker); 
       }); 
      } 
     }); 
    } 
    codeAddress('1 My Road, Somewhere, A1 1AA'); 
} 
相關問題