我有一个div,它有三个子div,第二个子元素中有两个div。我的目的是当我单击父div之外的任何地方时关闭div,而当我单击父div之内时,它不应该关闭。但每当我单击其中一个子元素时,div就会关闭。
我尝试使用window.addEventListener和if语句,以便每次在div外部单击时,显示更改为无。
'
let button = document.getElementById('btn');
let form = document.getElementById('form');
let submit_button = document.getElementById('submit');
window.addEventListener( 'click' , function(e) {
if ( e.target = button ) {
form.style.display = 'block';
form.style.backgroundColor = 'black';
form.style.color = '#fff';
window.addEventListener( 'click' , function(e) {
if ( e.target != button && e.target != form ) {
form.style.display = 'none';
}
});
}
})
'
<button id="btn" >
Add
</button>
<div id="form">
<h1>Hello</h1>
<div id="innerbox">
<div id="prompts">
</div>
<div id="user_inputs">
<input type="text" id="BookName" placeholder="Name">
<input type="text" id= "Author" placeholder="Author">
<input type="text" id="Pages" placeholder="Pages">
</div>
</div>
<div id="bottom_portion">
<button id="submit">
Submit
</button>
</div>
</div>
<script src="new.js">
</script>
``
3条答案
按热度按时间67up9zun1#
在文档级添加处理程序就足够了,在处理程序中使用
Element.closest
来过滤单击的按钮。使用css类隐藏
div#form
,并在单击button#btn
时删除该className(因此:显示表单)。ufj5ltwl2#
你可以使用事件传播。
下面是代码,stopProgation方法是用来阻止父事件调用的。
mbjcgjjk3#
存在多个错误。如果要检查是否已单击,则应在If语句中使用==而不是= My solution works。