2014-07-14 68 views
0

我試圖打開某個事件(例如,按鈕單擊)上的特定標記彈出。爲了做到這一點,我添加一個標識屬性到一個標記,並將所有標記存儲在一個數組中。但由於某種原因,當我嘗試訪問它時,數組內標記的id屬性未定義。單張打開特定標記彈出按鈕單擊

var map = L.map('map').setView([51.505, -0.09], 13); 
var markers = []; 
var marker = L.marker([51.5, -0.09]); 
marker["id"]="0"; 
marker.bindPopup('!'); 
marker.addTo(map); 
markers.push(marker); 

openPopupById("0"); 

function openPopupById(id) { 
    for(var marker in markers) { 
     alert("Marker's id " + marker["id"] + " target id " + id); 
     if (marker["id"] === id) { 
      //marker.openPopup(); 
      alert("opening " + id); 
     } 
    } 
    alert(id); 
} 

UPDATE 好吧,我找到了解決辦法:我應該

for(var i = 0; i < markers.length; ++i) 

,並獲得標誌更換for作爲markers[i]["id"]

但有人可以解釋我爲什麼第一個版本不工作?

+0

可能會有所幫助:http://stackoverflow.com/questions/9329446/how-to-do-for-each-over-an-array-in-javascript – YaFred

回答

0

,我認爲你的錯誤是使用推(以markers.push(標記))

要存儲的標記,你應該使用

markers["id"] = marker; 

您可以打開彈出像

markers["id"].openPopup(); 

爲標記知道自己的ID

marker.id = "id"; 
+0

是的,這可能是一個更好的解決方案,如果我不由於其他原因,不希望標記知道它是ID。我會考慮一下。但你能告訴我,爲什麼我的問題中的第一個解決方案不起作用? – Shamdor

+0

使用marker.id(不是標記[「id」])作爲標記不是數組。我已經更新了答案 – YaFred

+0

如果是這樣,爲什麼我的更新解決方案工作?我只是不明白他們之間的區別。 – Shamdor