2016-03-10 49 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); 
    } 
} 
相关问题