当您单击Press Me
时,将打开一个下拉菜单,当您再次单击它或在窗口中的其他任何位置单击它时,它将关闭。
我还想将此函数添加到旁边的dropdown-arrow
中,以便同步。
我也试着给予dropdown-arrow
onclick="myFunction()"
,但是没有用。
function myFunction() {
document.getElementsByClassName('dropdown-content')[0].classList.toggle('show');
}
// Close dropdown if the user clicks on window
window.onclick = function(event) {
if (!event.target.matches('#verify-name')) {
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');
}
}
}
}
.buttons {
display: flex;
position: relative;
}
#dropdown-arrow {
height: 20px;
}
.dropdown-content {
display: none;
position: absolute;
padding: 14px; background-color: yellow;
}
.show {
display: flex;
}
<div class="buttons">
<div>
<a id="verify-name" onclick="myFunction()">Press Me</a>
<img id="dropdown-arrow" src="https://www.svgrepo.com/show/335062/dropdown.svg">
<div class="dropdown-content">
<span>Logout</span>
</div>
</div>
</div>
2条答案
按热度按时间eagi6jfj1#
我有两种方法可以解决你的问题:
1.为下拉箭头附加单独的点击事件监听器。
1.使用
closest
方法检查点击的元素是Press Me
文本还是.dropdown-arrow
。让我添加第二个的实现。第一个是不言自明的。在下面的代码中,我已经将
window.onclick
赋值替换为window.addEventListener('click', function() {...})
,以避免与其他单击事件侦听器发生潜在冲突,这也是推荐的方式。8qgya5xd2#
将onclick事件添加到HTML中的下拉箭头:
字符串
修改window.onclick函数以检查verify-name和dropdown-arrow:
型
通过这些更改,单击“按我”链接或“关闭”箭头将切换“关闭”菜单。单击窗口上的其他任何位置将关闭它(如果它已打开)。