Javascript 单张单击按钮打开特定标记弹出窗口

Javascript 单张单击按钮打开特定标记弹出窗口,javascript,popup,leaflet,Javascript,Popup,Leaflet,我试图在某个事件上打开一个特定标记的弹出窗口,比如,点击按钮。为此,我向标记添加了一个id属性,并将所有标记存储在一个数组中。但由于某些原因,当我试图访问数组时,数组内部标记的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('!'); ma

我试图在某个事件上打开一个特定标记的弹出窗口,比如,点击按钮。为此,我向标记添加了一个id属性,并将所有标记存储在一个数组中。但由于某些原因,当我试图访问数组时,数组内部标记的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);
}
更新 好的,我找到了解决办法:我应该用

和访问标记作为标记[i][id]


但是有人能解释一下为什么第一个版本不起作用吗?

我想你的错误是使用了推入式标记。pushmarker

要存储标记,应使用

markers["id"] = marker;
你可以像那样打开弹出窗口

markers["id"].openPopup();
让标记者知道他们的id

marker.id = "id";

也许这会有帮助:是的,如果我不想让marker因为其他原因知道它的id,这可能是一个更好的解决方案。我会考虑的。但是你能告诉我,为什么我问题中的第一个解决方案不起作用吗?使用marker.id而不是marker[id],因为marker不是数组。我已经更新了答案如果是这样,为什么我更新的解决方案有效?我只是不明白他们之间的区别。
marker.id = "id";