2017-05-25 96 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