2016-01-24 25 views
0

我正在做的這個系統的問題是,我似乎無法使下拉按鈕與對方合作。我只想點擊另一個按鈕時點擊的第一個按鈕關閉。到目前爲止,他們只是彼此堆疊,除非再次點擊或在下拉區域外單擊。如何正確處理多個下拉按鈕

這裏是我的代碼:

<html> 
<style> 
.dropbtn { 
    background-color: #00BFFF; 
    color: white; 
    padding: 16px; 
    font-size: 16px; 
    border: none; 
    cursor: pointer; 
} 

.dropbtn:hover, .dropbtn:focus { 
    background-color: #1E90FF; 
} 

.dropdown2 { 
    position: relative; 
    display: block; 
} 


.dropdown-content2 { 
    display: none; 
    position: absolute; 
    background-color: #1E90FF; 
    min-width: 160px; 
    overflow: auto; 
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 
} 

.dropdown-content2 a { 
    color: black; 
    padding: 12px 16px; 
    text-decoration: none; 
    display: block; 

} 

.dropdown2 a:hover { 
background-color: #00BFFF; 

} 

.dropdown { 
    position: relative; 
    display: block; 
} 


.dropdown-content { 
    display: none; 
    position: absolute; 
    background-color: #1E90FF; 
    min-width: 160px; 
    overflow: auto; 
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 
} 

.dropdown-content a { 
    color: black; 
    padding: 12px 16px; 
    text-decoration: none; 
    display: block; 

} 

.dropdown a:hover { 
background-color: #00BFFF; 

} 

.show { 
display:block; 
position: relative; 
left:18.6%; 
top:-20%; 
width: 80%; 
} 

.border2 { 
float: left; 
border: 2px #FA5858; 
background-color: #FFFFFF; 
margin: 0 auto; 
padding-bottom:40px; 
padding-top:5px; 
width : 86%; 
height : 44%; 
top : -10%; 
left : 7%; 
position : relative; 
padding: 1em; 
} 
</style> 


<body> 
<div class = "border2"> 
<div style = "font-size:25px;list-style-type: none;margin: 0;padding: 10px;overflow: hidden;background-color: #BDBDBD; 
position : relative;top : -10%;width : 101.2%;left:-1.5%;"><strong>NEED HELP?</strong></div> 

<div class="dropdown"> 

<button onclick="myFunction()" class="dropbtn" style = "position:absolute; left:-1.5%; width:20%;">GUIDES</button> 
    <div id="myDropdown" class="dropdown-content"> 
    <ul> 
    <li><a>asasd.</a></li> 
    <li><a>Thasdat.</a></li> 
    <li><a>test2.</a></li> 
    </ul> 
    </div> 



<br><br><br><br> 
<button onclick="myFunction2()" class="dropbtn" style = "position:absolute; left:-1.5%; width:20%;">SUPPORT</button> 
    <div id="myDropdown2" class="dropdown-content2"> 
    <ul> 
    <li><a>test.</a></li> 
    <li><a>test.</a></li> 

    </ul> 
    </div> 
</div> 


</div> 
<script> 

function myFunction() { 
    document.getElementById("myDropdown").classList.toggle("show"); 
} 

window.onclick = function(event) { 
    if (!event.target.matches('.dropbtn')) { 

    var dropdowns = document.getElementsByClassName("dropdown-content"); 
    var i; 
    for (i = 0; i < dropdowns.length; i++) { 
     var openDropdown = dropdowns[i]; 
     if (openDropdown.classList.contains('show')) { 
     openDropdown.classList.remove('show'); 
     } 
    } 
    } 
} 

function myFunction2() { 
    document.getElementById("myDropdown2").classList.toggle("show"); 
} 

window.onclick = function(event) { 
    if (!event.target.matches('.dropbtn')) 
    { 

    var dropdowns = document.getElementsByClassName("dropdown-content"); 
    var i; 
    for (i = 0; i < dropdowns.length; i++) 
    { 
     var openDropdown = dropdowns[i]; 
     if (openDropdown.classList.contains('show')) 
     { 
     openDropdown.classList.remove('show'); 
     } 
    } 
    } 
} 

</script> 


</body> 
</html> 
+1

幫一下忙,包括樣本。 –

回答

1

假設你將始終按鈕和下拉用不同按鈕旁邊的ID。我認爲這將是一個解決方案,它也避免了CSS中的冗餘。

function hideDropdown(exceptId){ 
 
    var dropdowns = document.getElementsByClassName("dropdown-content"); 
 
    for (var i = 0; i < dropdowns.length; i++) { 
 
    var openDropdown = dropdowns[i]; 
 
    if (openDropdown.classList.contains('show') && openDropdown.id !== exceptId) { 
 
     openDropdown.classList.remove('show'); 
 
    } 
 
    } 
 
} 
 

 
window.onclick = function(event) { 
 
    if (!event.target.classList.contains('dropbtn')) { 
 
    hideDropdown(null); 
 
    }else{ 
 
    var dropdown = event.target.nextElementSibling; 
 
    dropdown.classList.toggle("show"); 
 
    hideDropdown(dropdown.id); 
 
    } 
 
}
.dropbtn { 
 
    background-color: #00BFFF; 
 
    color: white; 
 
    padding: 16px; 
 
    font-size: 16px; 
 
    border: none; 
 
    cursor: pointer; 
 
} 
 

 
.dropbtn:hover, .dropbtn:focus { 
 
    background-color: #1E90FF; 
 
} 
 

 
.dropdown2 { 
 
    position: relative; 
 
    display: block; 
 
} 
 

 
.dropdown { 
 
    position: relative; 
 
    display: block; 
 
} 
 

 

 
.dropdown-content { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: #1E90FF; 
 
    min-width: 160px; 
 
    overflow: auto; 
 
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 
 
} 
 

 
.dropdown-content a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 

 
} 
 

 
.dropdown a:hover { 
 
    background-color: #00BFFF; 
 

 
} 
 

 
.show { 
 
    display:block; 
 
    position: relative; 
 
    left:18.6%; 
 
    top:-20%; 
 
    width: 80%; 
 
} 
 

 
.border2 { 
 
    float: left; 
 
    border: 2px #FA5858; 
 
    background-color: #FFFFFF; 
 
    margin: 0 auto; 
 
    padding-bottom:40px; 
 
    padding-top:5px; 
 
    width : 86%; 
 
    height : 44%; 
 
    top : -10%; 
 
    left : 7%; 
 
    position : relative; 
 
    padding: 1em; 
 
}
<div class = "border2"> 
 
    <div style = "font-size:25px;list-style-type: none;margin: 0;padding: 10px;overflow: hidden;background-color: #BDBDBD; 
 
       position : relative;top : -10%;width : 101.2%;left:-1.5%;"><strong>NEED HELP?</strong></div> 
 

 
    <div class="dropdown"> 
 

 
    <button class="dropbtn" style = "position:absolute; left:-1.5%; width:20%;">GUIDES</button> 
 
    <div id="myDropdown" class="dropdown-content"> 
 
     <ul> 
 
     <li><a>asasd.</a></li> 
 
     <li><a>Thasdat.</a></li> 
 
     <li><a>test2.</a></li> 
 
     </ul> 
 
    </div> 
 

 

 

 
    <br><br><br><br> 
 
    <button class="dropbtn" style = "position:absolute; left:-1.5%; width:20%;">SUPPORT</button> 
 
    <div id="myDropdown2" class="dropdown-content"> 
 
     <ul> 
 
     <li><a>test.</a></li> 
 
     <li><a>test.</a></li> 
 

 
     </ul> 
 
    </div> 
 
    </div> 
 

 

 
</div>

+0

感謝您的幫助!兩個答案都奏效了,並修復了我的按鈕冗餘! – Raios

1

我猜你的意思是這樣的: 注:特別要注意在JS的評論和函數調用在HTML中的onclick事件的方式。即,myFunction(drpid)


JavaScript,CSS和HTML:


function myFunction(drpid) {  //THIS WAY YOU ONLY NEED ONE FUNCTION 
 
    document.getElementById(drpid).classList.toggle("show"); //SAME TOGGLE 
 
\t if (drpid=='myDropdown'){ //IF THE BUTTON CLICKED IS 'GUIDES' 
 
    \t document.getElementById("myDropdown2").classList.remove("show") \t \t 
 
\t \t } 
 
\t \t else{ //IF THE BUTTON CLICKED ISN'T 'GUIDES' 
 
    \t document.getElementById("myDropdown").classList.remove("show") \t \t 
 
\t \t } 
 
} 
 
window.onclick = function(event) { 
 
    if (!event.target.matches('.dropbtn')) { 
 
    \t document.getElementById("myDropdown2").classList.remove("show") \t \t 
 
    \t document.getElementById("myDropdown").classList.remove("show") \t \t 
 
    } 
 
}
.dropbtn { 
 
    background-color: #00BFFF; 
 
    color: white; 
 
    padding: 16px; 
 
    font-size: 16px; 
 
    border: none; 
 
    cursor: pointer; 
 
} 
 

 
.dropbtn:hover, .dropbtn:focus { 
 
    background-color: #1E90FF; 
 
} 
 

 
.dropdown2 { 
 
    position: relative; 
 
    display: block; 
 
} 
 

 

 
.dropdown-content2 { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: #1E90FF; 
 
    min-width: 160px; 
 
    overflow: auto; 
 
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 
 
} 
 

 
.dropdown-content2 a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 

 
} 
 

 
.dropdown2 a:hover { 
 
background-color: #00BFFF; 
 

 
} 
 

 
.dropdown { 
 
    position: relative; 
 
    display: block; 
 
} 
 

 

 
.dropdown-content { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: #1E90FF; 
 
    min-width: 160px; 
 
    overflow: auto; 
 
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 
 
} 
 

 
.dropdown-content a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 

 
} 
 

 
.dropdown a:hover { 
 
background-color: #00BFFF; 
 

 
} 
 

 
.show { 
 
display:block; 
 
position: relative; 
 
left:18.6%; 
 
top:-20%; 
 
width: 80%; 
 
} 
 

 
.border2 { 
 
float: left; 
 
border: 2px #FA5858; 
 
background-color: #FFFFFF; 
 
margin: 0 auto; 
 
padding-bottom:40px; 
 
padding-top:5px; 
 
width : 86%; 
 
height : 44%; 
 
top : -10%; 
 
left : 7%; 
 
position : relative; 
 
padding: 1em; 
 
}
<div class = "border2"> 
 
<div style = "font-size:25px;list-style-type: none;margin: 0;padding: 10px;overflow: hidden;background-color: #BDBDBD; 
 
position : relative;top : -10%;width : 101.2%;left:-1.5%;"><strong>NEED HELP?</strong></div> 
 

 
<div class="dropdown"> 
 

 
<button onclick="myFunction('myDropdown')" class="dropbtn" style = "position:absolute; left:-1.5%; width:20%;">GUIDES</button> 
 
    <div id="myDropdown" class="dropdown-content"> 
 
    <ul> 
 
    <li><a>asasd.</a></li> 
 
    <li><a>Thasdat.</a></li> 
 
    <li><a>test2.</a></li> 
 
    </ul> 
 
    </div> 
 

 

 

 
<br><br><br><br> 
 
<button onclick="myFunction('myDropdown2')" class="dropbtn" style = "position:absolute; left:-1.5%; width:20%;">SUPPORT</button> 
 
    <div id="myDropdown2" class="dropdown-content2"> 
 
    <ul> 
 
    <li><a>test.</a></li> 
 
    <li><a>test.</a></li> 
 

 
    </ul> 
 
    </div> 
 
</div> 
 

 

 
</div>

希望這有助於

+0

非常感謝您的幫助! :) – Raios