2016-03-10 50 views
1

下面是一個由w3schools提供的javascript下拉菜單的簡單代碼,我想要兩個下拉列表,因此我創建了一個更改元素和變量名稱的副本。兩個下拉菜單都可以正常工作,除非現在我無法點擊打開的下拉菜單,只需點擊網頁上的任何地方,即可使用一個下拉菜單正常工作。那麼如何在兩次下降的同時做到這一點。如何通過點擊頁面上的任何位置關閉下拉菜單?

/* When the user clicks on the button, 
 
toggle between hiding and showing the dropdown content */ 
 
function myFunction() { 
 
    document.getElementById("myDropdown").classList.toggle("show"); 
 
} 
 

 
// Close the dropdown menu if the user clicks outside of it 
 
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'); 
 
     } 
 
    } 
 
    } 
 
} 
 

 

 
/* When the user clicks on the button, 
 
toggle between hiding and showing the dropdown content */ 
 
function myFunction2() { 
 
    document.getElementById("myDropdown2").classList.toggle("show"); 
 
} 
 

 
// Close the dropdown menu if the user clicks outside of it 
 
window.onclick = function(event) { 
 
    if (!event.target.matches('.dropbtn2')) { 
 

 
    var dropdown = document.getElementsByClassName("dropdown-content2"); 
 
    var e; 
 
    for (e = 0; i < dropdown.length; e++) { 
 
     var opendropdown = dropdown[e]; 
 
     if (openDropdown.classList.contains('show')) { 
 
     openDropdown.classList.remove('show'); 
 
     } 
 
    } 
 
    } 
 
}
/* Dropdown Button */ 
 

 
.dropbtn { 
 
    background-color: #4CAF50; 
 
    color: white; 
 
    padding: 16px; 
 
    font-size: 16px; 
 
    border: none; 
 
    cursor: pointer; 
 
} 
 
/* Dropdown button on hover & focus */ 
 

 
.dropbtn:hover, 
 
.dropbtn:focus { 
 
    background-color: #3e8e41; 
 
} 
 
/* The container <div> - needed to position the dropdown content */ 
 

 
.dropdown { 
 
    position: relative; 
 
    display: inline-block; 
 
} 
 
/* Dropdown Content (Hidden by Default) */ 
 

 
.dropdown-content { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: #f9f9f9; 
 
    min-width: 160px; 
 
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); 
 
} 
 
/* Links inside the dropdown */ 
 

 
.dropdown-content a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 
} 
 
/* Change color of dropdown links on hover */ 
 

 
.dropdown-content a:hover { 
 
    background-color: #f1f1f1 
 
} 
 
/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */ 
 

 
.show { 
 
    display: block; 
 
} 
 
/* Dropdown Button */ 
 

 
.dropbtn2 { 
 
    background-color: #4CAF50; 
 
    color: white; 
 
    padding: 16px; 
 
    font-size: 16px; 
 
    border: none; 
 
    cursor: pointer; 
 
} 
 
/* Dropdown button on hover & focus */ 
 

 
.dropbtn2:hover, 
 
.dropbtn2:focus { 
 
    background-color: #3e8e41; 
 
} 
 
/* The container <div> - needed to position the dropdown content */ 
 

 
.dropdown2 { 
 
    position: relative; 
 
    display: inline-block; 
 
} 
 
/* Dropdown Content (Hidden by Default) */ 
 

 
.dropdown-content2 { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: #f9f9f9; 
 
    min-width: 160px; 
 
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); 
 
} 
 
/* Links inside the dropdown */ 
 

 
.dropdown-content2 a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 
} 
 
/* Change color of dropdown links on hover */ 
 

 
.dropdown-content2 a:hover { 
 
    background-color: #f1f1f1 
 
} 
 
/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */ 
 

 
.show { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td> 
 
     <div class="dropdown"> 
 
     <button onclick="myFunction()" class="dropbtn">Dropdown</button> 
 
     <div id="myDropdown" class="dropdown-content"> 
 
      <a href="#">Link 1</a> 
 
      <a href="#">Link 2</a> 
 
      <a href="#">Link 3</a> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="dropdown2"> 
 
     <button onclick="myFunction2()" class="dropbtn">Dropdown2</button> 
 
     <div id="myDropdown2" class="dropdown-content2"> 
 
      <a href="#">Link 1</a> 
 
      <a href="#">Link 2</a> 
 
      <a href="#">Link 3</a> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</table>

回答

2

你可以像下面的方式。在切換課程時,無需編寫該代碼來刪除課程。

只需在窗口上單擊刪除。

/* When the user clicks on the button, 
 
toggle between hiding and showing the dropdown content */ 
 
function myFunction(event) { 
 
    event.stopPropagation(); 
 
    document.getElementById("myDropdown").classList.toggle("show"); 
 
} 
 

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

 
// Close the dropdown menu if the user clicks outside of it 
 
window.onclick = function(event) { 
 
    document.getElementById("myDropdown").classList.remove("show"); 
 
    document.getElementById("myDropdown2").classList.remove("show"); 
 
}
/* Dropdown Button */ 
 

 
.dropbtn { 
 
    background-color: #4CAF50; 
 
    color: white; 
 
    padding: 16px; 
 
    font-size: 16px; 
 
    border: none; 
 
    cursor: pointer; 
 
} 
 
/* Dropdown button on hover & focus */ 
 

 
.dropbtn:hover, 
 
.dropbtn:focus { 
 
    background-color: #3e8e41; 
 
} 
 
/* The container <div> - needed to position the dropdown content */ 
 

 
.dropdown { 
 
    position: relative; 
 
    display: inline-block; 
 
} 
 
/* Dropdown Content (Hidden by Default) */ 
 

 
.dropdown-content { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: #f9f9f9; 
 
    min-width: 160px; 
 
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); 
 
} 
 
/* Links inside the dropdown */ 
 

 
.dropdown-content a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 
} 
 
/* Change color of dropdown links on hover */ 
 

 
.dropdown-content a:hover { 
 
    background-color: #f1f1f1 
 
} 
 
/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */ 
 

 
.show { 
 
    display: block; 
 
} 
 
/* Dropdown Button */ 
 

 
.dropbtn2 { 
 
    background-color: #4CAF50; 
 
    color: white; 
 
    padding: 16px; 
 
    font-size: 16px; 
 
    border: none; 
 
    cursor: pointer; 
 
} 
 
/* Dropdown button on hover & focus */ 
 

 
.dropbtn2:hover, 
 
.dropbtn2:focus { 
 
    background-color: #3e8e41; 
 
} 
 
/* The container <div> - needed to position the dropdown content */ 
 

 
.dropdown2 { 
 
    position: relative; 
 
    display: inline-block; 
 
} 
 
/* Dropdown Content (Hidden by Default) */ 
 

 
.dropdown-content2 { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: #f9f9f9; 
 
    min-width: 160px; 
 
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); 
 
} 
 
/* Links inside the dropdown */ 
 

 
.dropdown-content2 a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 
} 
 
/* Change color of dropdown links on hover */ 
 

 
.dropdown-content2 a:hover { 
 
    background-color: #f1f1f1 
 
} 
 
/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */ 
 

 
.show { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td> 
 
     <div class="dropdown"> 
 
     <button onclick="myFunction(event)" class="dropbtn">Dropdown</button> 
 
     <div id="myDropdown" class="dropdown-content"> 
 
      <a href="#">Link 1</a> 
 
      <a href="#">Link 2</a> 
 
      <a href="#">Link 3</a> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="dropdown2"> 
 
     <button onclick="myFunction2(event)" class="dropbtn">Dropdown2</button> 
 
     <div id="myDropdown2" class="dropdown-content2"> 
 
      <a href="#">Link 1</a> 
 
      <a href="#">Link 2</a> 
 
      <a href="#">Link 3</a> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</table>

+0

感謝名單科坦試圖加載DD菜單'內頁製作功能window.onclick = function(event){(「#notificationContainer」).load(「notificationsbox.php」); document.getElementById(「myDropdown」)。classList.remove(「show」); $(「#scoreContainer」).load(「scorebox.php」); document.getElementById(「myDropdown2」)。classList.remove(「show」); }'這個工作有點晚,需要太多的時間來加載容器中的頁面是否有更好的方法。 –

1

使用jQuery的幫助下,可以處理一些元素之外點擊以下面的方式

function outsideElementClickEvent(elm, callback) { 
    function isClickedOutside(e){ 
     var container = $(elm); 

     if (!container.is(e.target) // if the target of the click isn't the container... 
      && container.has(e.target).length === 0) // ... nor a descendant of the container 
     { 
      callback(); 
     } 
    } 

    $(document).mouseup(isClickedOutside); 
    return isClickedOutside; 
}, 

/** 
* It removes outside element handler passed in as a parameter. 
* 
* @param handler 
*/ 
function removeOutsideElementHandler(handler) { 
    if (handler) { 
     $(document).unbind("mouseup", handler); 
    } 
} 
相關問題