我希望當我在帶有 ID的My DIVContainer_ID之外單擊時,所有 Container 都會被隱藏display: none;。我在JavaScript中呈現的代碼在一定程度上可以作業,因為當我單擊它的任何部分時,Container_ID它會回傳相同的行為,我的 DIV會隱藏。當我與自身內部的元素 互動時,這是不應該Controls_CLASS的。當我單擊它們時,它們應該被排除在隱藏全部之外,因為它們在里面。ul,liCheckbox_CLASSContainer_IDContainer_ID
我該如何改進呢?
JavaScript(字體:https ://codepen.io/marizawi/pen/YgaaMp )
window.addEventListener('mouseup', function(event) {
var cont = document.getElementById('Container_ID');
if (event.target != cont && event.target.parentNode != cont) {
cont.style.display = 'none';
}
});
div.Container_CLASS {
width: 50%;
height: 350px;
margin-top: 4px;
margin-left: 4px;
display: block;
position: absolute;
overflow-y: scroll;
}
<div class="Container_CLASS" id="Container_ID">
<div class="Controls_CLASS"><a href="#">Select All</a>|<a href="#">Reset</a></div>
<ul>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="BMW" />BMW</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Mercedes" />Mercedes</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Volvo" />Volvo</li>
</ul>
</div>
uj5u.com熱心網友回復:
這項作業。使用closest方法來檢查點擊的 outsde div。
最近的
一個元素的祖先是:parent、parent的parent、它的parent等等。祖先一起形成了從元素到頂部的父鏈。
該方法elem.closest(css)查找與 CSS 選擇器匹配的最近的祖先。它elem本身也包含在搜索中。
換句話說,該方法closest從元素開始并檢查每個父元素。如果它與選擇器匹配,則搜索停止,并回傳祖先。
如果div有id
window.addEventListener('mouseup',function(event){
var pol = document.getElementById('pol');
if(!(event.target.closest("#pol"))){
pol.style.display = 'none';
}
});
h2{margin:0 0 10px}
#pol{
width:400px;
height:300px;
background:#999;
text-align:center;
display:none;
margin-top:0;
margin:10px;
}
<h2>Click outside div will be hide. Click Button div will be display</h2>
<button onClick="document.getElementById('pol').style.display='block'">Show</button>
<div id="pol">
I am Tanmoy Biswas
<p>ksjdhfksjdhfkjshdfkjsdfsf</p>
<div class="Controls_CLASS"><a href="#">Select All</a>|<a href="#">Reset</a></div>
<ul>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="BMW" />BMW</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Mercedes" />Mercedes</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Volvo" />Volvo</li>
</ul>
</div>
如果div有class:
window.addEventListener("mouseup", function (event) {
let pol = document.querySelectorAll(".pol");
pol.forEach((myDiv) => {
if (!(event.target.closest(".pol"))) {
myDiv.style.display = "none";
}
});
});
h2{margin:0 0 10px}
.pol{
width:400px;
height:300px;
background:#999;
text-align:center;
display:none;
margin-top:0;
margin:10px;
}
<h2>Click outside div will be hide. Click Button div will be display</h2>
<button onClick="document.getElementById('a').style.display='block'">Show</button>
<div id="a" class="pol">
I am Tanmoy Biswas
<p>ksjdhfksjdhfkjshdfkjsdfsf</p>
<div class="Controls_CLASS"><a href="#">Select All</a>|<a href="#">Reset</a></div>
<ul>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="BMW" />BMW</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Mercedes" />Mercedes</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Volvo" />Volvo</li>
</ul>
</div>
<h2>Click outside div will be hide. Click Button div will be display</h2>
<button onClick="document.getElementById('b').style.display='block'">Show</button>
<div id="b" class="pol">
I am Tanmoy Biswas
<p>ksjdhfksjdhfkjshdfkjsdfsf</p>
<div class="Controls_CLASS"><a href="#">Select All</a>|<a href="#">Reset</a></div>
<ul>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="BMW" />BMW</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Mercedes" />Mercedes</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Volvo" />Volvo</li>
</ul>
</div>
uj5u.com熱心網友回復:
這就是我要做的。
只需檢查單擊的元素 ( event.target) 是否在容器中,或者是否event.target是顯示容器的元素。
const theDiv = document.getElementById('theDiv');
const theButton = document.getElementById('theButton');
document.addEventListener('click', function(event) {
if (theDiv.contains(event.target) || event.target.id === 'theButton') return;
theDiv.hidden = true;
})
div {
background-color: red;
height: 400px;
width: 400px;
}
<button type="button" onclick="this.nextElementSibling.hidden=false" id="theButton">Show</button>
<div hidden id="theDiv">
<button>clicking here won't close</button>
</div>
對于您的示例:
const container = document.getElementById('Container_ID');
document.addEventListener('click', function(event) {
if (container.contains(event.target)) return;
container.hidden = true;
})
div.Container_CLASS {
border: 1px solid red;
width: 50%;
height: 350px;
margin-top: 4px;
margin-left: 4px;
position: absolute;
overflow-y: scroll;
}
<div class="Container_CLASS" id="Container_ID">
<div class="Controls_CLASS"><a href="javascript:void(0)">Select All</a>|<a href="javascript:void(0)">Reset</a></div>
<ul>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="BMW" />BMW</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Mercedes" />Mercedes</li>
<li><input type="checkbox" name="cars[]" class="Checkbox_CLASS" value="Volvo" />Volvo</li>
</ul>
</div>
uj5u.com熱心網友回復:
以下是您可以使用的一些選項
最好的 IMO 是滑鼠離開事件
滑鼠離開
document.getElementById("Container_ID").addEventListener('mouseleave',function(event){
document.getElementById("Container_ID").style.display = "none";
});
專注于
document.getElementById("Container_ID").addEventListener('focusout',function(event){
document.getElementById("Container_ID").style.display = "none";
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419645.html
標籤:
上一篇:在Angular中修改Observable并回傳新的Observable并進行更改
下一篇:從僅日期獲取沒有時間的日期
