2010-08-31 93 views
0

我在玩Google Maps API V3。Javascript - 如何給變量賦予像var_1,var_2等循環名稱

我想創建一個系列在地圖上標記。

我也跟着教程,並得到:

下面這段代碼添加了一個標記 - 第一個。

我完全新的JavaScript但是從我的PHP知識,我認爲這是不工作的原因是因爲所有的標誌都被存儲在一個名爲「M」的變種。

即2號替換1號

我的困惑是但是,如果是這樣的話,標記2將顯示未標記1.

誰能假定一個可能的解釋/修復?

感謝

下面

Editted代碼:

function initialize(){ 
// Creating a map 
var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 10, 
    center: new google.maps.LatLng(53., -2.44519164333635), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 


var m = []; 

function addMarker(title, lat, lng) { 
m = new google.maps.Marker({ 
position: new google.maps.LatLng(lat, lng), 
map: map, 
title: title, 
clickable: true 
}); 


} 



addMarker('Home', 53.0682143712504, -2.52150736731894); 
addMarker('Away', 53., -2.44519164333635); 



} 
+0

這個標題應該改變,因爲它使我相信我找到了正確的問題,但最終是一個無關的答案。這個問題與使用javascript給變量名稱無關,它與Google API沒有正確地使用javascript有關。 – EKet 2011-07-03 21:36:22

回答

2

我懷疑的問題是,你要對待對象 「M」 就好像它是一個陣列。聲明它是這樣的:

var m = []; 

看看會發生什麼。在普通對象上沒有「推」功能,所以行在添加第一個標記後拋出異常。

但是,當您嘗試使用新代碼時,Javascript錯誤控制檯會顯示在您正在使用的瀏覽器中,並且總是顯示爲。好吧,也許不是總是,但肯定是奇怪的事發生。

編輯 —在代碼中調用.push()函數沒問題;問題在於你試圖從非數組中調用它。所有的功能都是用給定的元素擴展數組。 Javascript數組有點奇怪,主要的魔力與運行時如何維護「length」屬性的值有關。你可以更直接地擴展數組是這樣的:

arr[arr.length] = newValue; 

你也可以簡單地使用某種方式計算的一些數字指標:

arr[pick_a_number()] = newValue; 

當你這樣做時,運行時可確保「長度「屬性被正確更新,如果用作索引的數字大於當前值。現在

,回到你更新的代碼。現在它起作用了,因爲您要連續添加點到地圖而不會觸發任何例外。然而,通過寫

m = google.whatever(...); 

你不再添加那些指向數組 - 你重新分配變量「M」的要點之一,一遍又一遍。如果你還改變了「m」的聲明,如我建議—它仍然可以工作,並且你會正確地填充你的數組,你可以將它改回「推」和—。

+0

謝謝! 前提(正如tut所解釋的),您需要將標記添加到數組中,以便您可以遍歷它們並在需要時將它們刪除。 我上面編輯了我的代碼。它完美的作品。 只爲我的信息。你能否詳細說明'推'是什麼,以及爲什麼我可以通過簡單地寫var m =''來爲我的數組'm'添加一個點。 在PHP中,將REPLACE m .. 謝謝 – 2010-08-31 13:51:46

+0

我會延長我的答案。 – Pointy 2010-08-31 14:05:08

0

m是作用於它的函數的範圍,所以這不是問題。我的猜測是,當你致電marker.push(m)時,你會遇到錯誤。 是一個對象,沒有push方法。把它作爲一個數組(var marker = [])。由於它正在破壞該行,因此永遠不會執行第二次調用該函數。但它已經在屏幕上添加了標記,這就是您看到它的原因。

0

變量m在初始化的範圍內,就像函數addMarker一樣。

每次將標記對象設置爲m(首先是數組)時,都會存儲對新創建的標記對象的引用。你可能會提到這個問題。

相反,如設置米到標記對象,使用推(對象添加到陣列的製備方法)以下:

m.push(new google.maps.Marker({ 
    position: new google.maps.LatLng(lat, lng), 
    map: map, 
    title: title, 
    clickable: true 
});).