Leaflet 当在传单1.0上单击GeoJSON时,单击地图会触发

Leaflet 当在传单1.0上单击GeoJSON时,单击地图会触发,leaflet,Leaflet,在传单1.0 beta2中,当使用指定的click函数和定义的map click函数单击GeoJSON时,它们都会触发,而不仅仅是一个。在旧版本的传单中不会出现这种情况。有关示例,请参见小提琴。有什么解决办法吗 单张7.7 单张1.0 beta2 使用L.DomEvent的stopPropagation方法: 停止给定事件向父元素的传播 这是你小提琴的工作叉: 或者,您可以将单击事件添加到图层选项对象中的非气泡事件数组中。这是目前未记录的文档,因此我无法链接到任何文档,仅链接到Github

在传单1.0 beta2中,当使用指定的click函数和定义的map click函数单击GeoJSON时,它们都会触发,而不仅仅是一个。在旧版本的传单中不会出现这种情况。有关示例,请参见小提琴。有什么解决办法吗

单张7.7

单张1.0 beta2


使用
L.DomEvent
stopPropagation
方法:

停止给定事件向父元素的传播

这是你小提琴的工作叉:

或者,您可以将
单击
事件添加到图层选项对象中的
非气泡事件
数组中。这是目前未记录的文档,因此我无法链接到任何文档,仅链接到Github上的提交:

添加非气泡事件选项(修复#3604)


以下是使用此解决方案的小提琴叉:

使用
L.DomEvent
stopPropagation
方法:

停止给定事件向父元素的传播

这是你小提琴的工作叉:

或者,您可以将
单击
事件添加到图层选项对象中的
非气泡事件
数组中。这是目前未记录的文档,因此我无法链接到任何文档,仅链接到Github上的提交:

添加非气泡事件选项(修复#3604)


下面是一个使用此解决方案的例子:

如果您想完全停止传播,iH8给了您一个很好的答案。但是,如果仍然希望启动map函数,可以添加一个变量检查。例如


如果你想完全停止传播,iH8给了你一个很好的答案。但是,如果仍然希望启动map函数,可以添加一个变量检查。例如


我懂了。我以为这是传单1.0测试版中的一个bug。。。但是Ivan Sanchez告诉我,“事件从层冒泡到地图”(是的,我知道:)CHANGELOG.md中提到:“改进的层DOM事件冒泡机制(作者@yohanboniface)。传单/传单#3307#3450#3307”向上看,我发现我忘记了阻止事件冒泡的另一个选项,我会把它加到我的答案里,我明白了。我以为这是传单1.0测试版中的一个bug。。。但是Ivan Sanchez告诉我,“事件从层冒泡到地图”(是的,我知道:)CHANGELOG.md中提到:“改进的层DOM事件冒泡机制(作者@yohanboniface)。传单/传单#3307#3450#3307”向上看,我发现我忘记了阻止事件冒泡的另一个选项,我会把它添加到我的答案中。我知道这是多么有用。如果您只想执行映射的一部分,请在单击geojson时单击函数。这是因为geoJSON click函数是在映射单击之前启动的。我知道这是多么有用。如果您只想执行映射的一部分,请在单击geojson时单击函数。这是因为geoJSON click函数是在映射单击之前启动的。
// Create the map
var map = L.map('map').setView([41, -98], 5);

//when map is clicked run identify
map.on('click', identify);

// Identify function
function identify(e) {
    alert('click on the map');
};

//example geojson
var states = [{
    "type": "Feature",
    "properties": {"party": "Republican"},
    "geometry": {
        "type": "Polygon",
        "coordinates": [[
            [-104.05, 48.99],
            [-97.22,  48.98],
            [-96.58,  45.94],
            [-104.03, 45.94],
            [-104.05, 48.99]
        ]]
    }
}, {
    "type": "Feature",
    "properties": {"party": "Democrat"},
    "geometry": {
        "type": "Polygon",
        "coordinates": [[
            [-109.05, 41.00],
            [-102.06, 40.99],
            [-102.03, 36.99],
            [-109.04, 36.99],
            [-109.05, 41.00]
        ]]
    }
}];

//style the polygon with clickedgeojson function
parpoly = L.geoJson(states, {
    style: {
    color: '#ff7800',
    weight: 1.5,
    opacity: 1,
    fillOpacity: 0
   },
   onEachFeature: function(feature, layer) {
    layer.on({
        click: clickedgeojson
     });
    }
});

//clickedgeojson function
function clickedgeojson(e) {
    alert('click on json');
};

// Set up the OSM layer
L.tileLayer(
    'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', 
    {maxZoom: 18}).addTo(map);

//add the geojson to map
parpoly.addTo(map);
//clickedgeojson function
function clickedgeojson(e) {
    L.DomEvent.stopPropagation(e);
    alert('click on json');
};
new L.GeoJSON(collection, {
    nonBubblingEvents: ['click']
})
var idGeo = 0;

// Identify function
function identify(e) {
    if(idGeo ==1){
    idGeo = 0;
  }else{
    alert('click on the map');
    idGeo = 0;
  }
};

//clickedgeojson function
function clickedgeojson(e) {
    idGeo = 1;
    alert('click on json');
};