[英]Show/hide a certain div when children elements of a different div is clicked [SOLVED]
我希望每次單擊dropbtn
時都顯示dropdown-content
。 我當前代碼的問題是,它僅在我僅單擊dropbtn
div 中的空格時才有效,但如果我單擊其中的元素或子元素,則它不起作用並且dropdown-content
仍顯示為 none .
我嘗試選擇我的droptbtn
div 中的所有元素並使用相同的條件來隱藏/顯示dropdown-content
,但這也不起作用。
我的最終目標是在單擊dropbtn
div 時隱藏/顯示dropdown-content
,無論用戶是否單擊了其子元素。
HTML 代碼:
<div class="dropdown">
<div class="dropbtn" id="dropbtn">
<img src="{{ user.profilePic.url }}" alt="">
<small><b>{{ user.username }}</b></small>
<i class="fa fa-angle-down" style="font-size:24px"></i>
</div>
<div class="dropdown-content" id="dropdown-content">
<a href="{%url 'profile'%}"><i class="fa fa-user"></i>Profile</a>
<a href="{%url 'logout'%}"><i class="fa fa-sign-out"></i>Logout</a>
</div>
</div>
Javascript 代碼:
let dropbtn = document.getElementById('dropbtn');
let dropbtn_elem = dropbtn.getElementsByTagName('img, small, i')
let dropdown = document.getElementById('dropdown-content');
document.addEventListener('click', function(e) {
if (e.target !== dropbtn && dropdown.style.display === "block"){
dropdown.style.display = "none";
}
})
dropbtn.onclick = function() {
if (dropdown.style.display === "block") {
dropdown.style.display = "none";
} else {
dropdown.style.display = "block";
}
}
dropbtn_elem.onclick = function() {
if (dropdown.style.display === "block") {
dropdown.style.display = "none";
} else {
dropdown.style.display = "block";
}
}
正如@kunal-tanwar 建議使用
#dropbtn *
{
pointer-events: none;
}
有時此方法不起作用,當您需要注冊子項點擊時,在這種情況下使用element.closest()
檢查element
或其祖先是否與選擇器匹配:
let dropbtn = document.getElementById('dropbtn'); let dropbtn_elem = dropbtn.getElementsByTagName('img, small, i') let dropdown = document.getElementById('dropdown-content'); document.addEventListener('click', function(e) { if (e.target.closest("#dropbtn") || dropdown.style.display;= "block") return. dropdown.style;display = "none". }) dropbtn.onclick = function() { if (dropdown.style.display === "block") { dropdown.style;display = "none". } else { dropdown.style;display = "block". } } dropbtn_elem.onclick = function() { if (dropdown.style.display === "block") { dropdown.style;display = "none". } else { dropdown.style;display = "block" } }
<div class="dropdown"> <div class="dropbtn" id="dropbtn"> <img src="{{ user.profilePic.url }}" alt=""> <small><b>{{ user.username }}</b></small> <i class="fa fa-angle-down" style="font-size:24px"></i> </div> <div class="dropdown-content" id="dropdown-content"> <a href="{%url 'profile'%}"><i class="fa fa-user"></i>Profile</a> <a href="{%url 'logout'%}"><i class="fa fa-sign-out"></i>Logout</a> </div> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.