Javascript 传单js overlayadd/overlayremove-如何检查多个图层?

Javascript 传单js overlayadd/overlayremove-如何检查多个图层?,javascript,leaflet,Javascript,Leaflet,我对javascript相当陌生,我正在尝试让我的项目运行起来。目标是有条件地显示多个覆盖-因此,如果Layer1和Layer2都已添加(由用户在复选框中签出),则应运行LayerControl 另外:如果其中一个控件被删除,则该控件应完全从映射中删除 我在检查两个层是否同时添加时遇到问题。&&(和)和| |(或)不适合我。 下面是我的代码示例: map1.on({ overlayadd: function(e1,e2) { if (e1.name === 'LAYER1'&&a

我对javascript相当陌生,我正在尝试让我的项目运行起来。目标是有条件地显示多个覆盖-因此,如果Layer1和Layer2都已添加(由用户在复选框中签出),则应运行LayerControl

另外:如果其中一个控件被删除,则该控件应完全从映射中删除

我在检查两个层是否同时添加时遇到问题。&&(和)和| |(或)不适合我。 下面是我的代码示例:

map1.on({
overlayadd: function(e1,e2) {
    if (e1.name === 'LAYER1'&& e2.name==='LAYER2'){
    sBs01 = L.control.sideBySide(LAYER1,LAYER2);
    sBs01.addTo(map1);
    }
},
overlayremove: function(e) {
    if (e.name === 'LAYER1'|| e.name==='LAYER2') {
    map1.removeControl(sBs01)
    }
}});
这应该很简单,但我想我遗漏了一些东西

我还尝试了另一种方法,以避免和/或通过添加两次IF,如下所示:

map1.on('overlayadd', function(eventlayer){ 
    if (eventlayer.layer==LAYER1) {
        map1.on('overlayadd', function (eventlayer2)
        {
            if(eventlayer2.layer==LAYER2){
            sBs01 = L.control.sideBySide(LAYER1,LAYER2);
            sBs01.addTo(this);
            }    
        }       )
        } } );
它完成了这项工作,但不是最理想的。如果删除了2层中的任何一层,则稍后尝试删除控件时会出现问题


请用你们的投入帮助我解决这个问题,这对我来说意味着一个世界

您使用的是
overlayadd
/
overlayremove
事件,只有通过
L.Control.Layers添加/删除图层时,该事件才起作用。如果通过其他方式添加/删除图层,这可能会导致问题

我建议您使用
layeradd
/
layerremove
事件(请参阅),并检查
L.Layer
的实例,而不是它们在层控件中的名称

此外,由于事件的性质,您只能获得受该事件影响的层的引用(名称或实例)。您正在编写
overlayadd:function(e1,e2){
,但事件处理程序函数不可能同时接收两个事件(请参见),更不用说按您期望的顺序了


如果您想检查地图中添加(或不包含)的图层组合,请使用
L.map
hasLayer()
。请参阅。

非常感谢您的回答和有用的输入,@IvanSanchez

所有层都是通过
L.Control.layers
添加的,因此
overlayadd
overlayremove
对它们有效。不过,我确实使用了
hasLayer()

类似这样的方法奏效了:

sBs01 = L.control.sideBySide(LAYER1,LAYER2);
    map.on('overlayadd', function(eventlayer){ 
        if(eventlayer.layer===LAYER1){
        if(map.hasLayer(LAYER1)){
            sBs1.addTo(this); 
            }});
与此类似,用于overlyremove。 它可能会帮助某人