JS传单:如何将(Geo-)json ID传递给click事件?

时间:2013-03-29 21:20:22

标签: javascript onclick leaflet geojson

我的django网络应用应该执行以下操作:将Geojson对象传递到视图,使用传单映射点,并在用户单击点标记时显示一些其他信息。我对js不是那么熟悉所以我被绑定了正确类型的数据到click事件。这是一个geojson对象示例。如何使用click事件访问“ID”?

var geojsonFeature = {'geometry':
                          {'type': 'MultiPoint', 
                          'coordinates': [[4.939, 52.33], [4.9409, 52.33]]
                          }, 
                     'type': 'Feature', 
                     'properties': 
                        {'id': '52','popupContent': 'id=52'}
                     };

将geojson对象添加到地图中..

var gj = L.geoJson(geojsonFeature, {
    pointToLayer: function (feature, latlng) {
    return L.circleMarker(latlng, geojsonMarkerOptions);
    }}).addTo(map);

on() - 点击....

gj.on('click', function(evt) {
   alert(id) // well, this is where I need help
});

注意:我不想使用类似bindPopup(feature.properties.popupContent)的内容,因为我想打开一个新窗口,使用数据库中的一些额外数据调用不同的django视图。

2 个答案:

答案 0 :(得分:14)

对于遇到类似问题的每个人:您要使用的是onEachFeature功能。该功能表示geojson对象。使用上面提供的示例数据,可以通过feature.properties.popupContent访问ID。

function onEachFeature(feature, layer) {
    layer.on('click', function (e) {
        alert(feature.properties.popupContent);
        //or
        alert(feature.properties.id);
    });
}

答案 1 :(得分:2)

尝试上面发布的解决方案后没有成功,我得到了这个版本的工作:

function onEachFeature(feature, layer) {
    layer.on('click', function (e) {
        alert(e.target.feature.properties.popupContent);
        //or
        alert(e.target.feature.properties.id);
    });
}