2017-05-25 95 views
2

自从我研究网络映射已经过去了一个月。我目前正在练习jQuery和GeoServer。是否有更简单的方法来执行if else语句?

有没有办法让我简化它?我可以在这里使用switch吗?

bridge.on('change:visible', function(){ 
    if(bridge.getVisible() == true) { 
     $('#bridge').show();       
    } else { 
     $('#bridge').hide(); 
    } 
}); 

road.on('change:visible', function(){ 
    if(road.getVisible() == true) { 
     $('#road').show();      
    } else { 
     $('#road').hide(); 
    } 
}); 

rail.on('change:visible', function(){ 
    if(rail.getVisible() == true) { 
     $('#rail').show();      
    } else { 
     $('#rail').hide(); 
    } 
});  
+0

*“我可以在这里使用开关吗?”*您可以随时使用'switch'而不是'if/else',但这并不意味着您应该*。在这种情况下,您可以用'$(“#bridge”)替换整个if/else。toggle(bridge.getVisible())'。 (或者可能是'$(“#bridge”)。toggle(bridge.getVisible()== true)'如果有机会'.getVisible()'可能会返回布尔值以外的内容) – nnnnnn

+1

如果'rail'和' #rail'是同一个对象,那么使用你可以使用'this'。否则,您可以使用数据属性来使类的行为类似,但在不同的目标上。但目前尚不清楚 - 什么是“铁路”,“道路”,“桥梁”?你能显示HTML吗? (仅与此代码有关) –

+0

'on(“change:visible”)'有效的语法?它应该做什么? –

回答

1

这个问题与if-else语句并不需要简化,它是repetition。包裹重复的代码中的函数,因子的差异成参数,和三次叫它:通过省略多余== true并通过使用toggle与参数

function toggleWithVisibility(source, target) { 
    source.on('change:visible', function(){ 
     if (source.getVisible() == true) { 
      target.show();       
     } else { 
      target.hide(); 
     } 
    }); 
} 
toggleWithVisibility(bridge, $('#bridge')); 
toggleWithVisibility(road, $('#road')); 
toggleWithVisibility(rail, $('#rail')); 

也可以简化的功能的代码:

function toggleWithVisibility(source, target) { 
    source.on('change:visible', function(){ 
     target.toggle(source.getVisible()); 
    }); 
} 

你还没有告诉我们你的三个变量是如何定义的,机会是好的,你也许可以简化它们,例如一起选择sourcetarget,并通过循环调用该函数。

0

您可以使用单jQuery()电话,.on()和条件运算符,.filter()

$("#bridge, #road, #rail").on("change:visible", function() { 
    $(this).toggle(!$(this).getVisible()); 
}); 
+0

请注意,OP的三个功能并不全部更新'#道路“。 – nnnnnn

+0

@nnnnnn错过 – guest271314

+1

我怀疑适当使用'this'会解决问题,但目前还不清楚'bridge'和'#bridge'是否是相同的元素,所以... – nnnnnn

0
var $list= ["bridge", "road","rail"]; 


$list.forEach(function(v) { 
    if($('#'+v').is(":visible")) { 
      $('#'+v').show();      
     } else { 
      $('#'+v').hide(); 
     } 
    } 
}); 

希望这有助于你。

+1

bridge ,道路和铁路是变量,但不幸的是这不会绑定'change:visible'事件 – derp

1

拥抱功能!

function toggleVisible(thing, selector){ 
    selector.toggle(thing.getVisible()); 
} 

bridge.on('change:visible', toggleVisible.bind(this, bridge, $('#bridge')); 
road.on('change:visible', toggleVisible.bind(this, road, $('#road')); 
rail.on('change:visible', toggleVisible.bind(this, rail, $('#rail')); 
+0

你不需要[toggle](http://api.jquery.com/toggle/) – Rajesh

+0

中的参数,因为我我将可见性设置为传入的参数。可能是其他事件正在影响显示/隐藏行为,我们只是想设置可见性而不是改变其状态 – derp

+0

'Toggle'要求'duration'作为第一个参数。 'getVisible'将返回布尔值,然后将其转换为'0'或'1' – Rajesh

0

我还没有测试过!

bridge.on('change:visible', function(){ 
     $('#bridge').toggle(); 
    }); 

    road.on('change:visible', function(){ 
     $('#road').toggle(); 
    }); 

    rail.on('change:visible', function(){ 
     $('#rail').toggle(); 
    }); 
+0

请在发布之前检查其他答案。 – Rajesh

+0

这可能很容易失去同步。 – Bergi