我有一个带有表单和单独按钮(进一步closeButton)的模式窗口。当模式窗口打开时,我在closeButton上挂起一个事件,该事件关闭模式窗口。窗口关闭后,我希望从按钮中删除该事件。如果您只是打开和关闭模式窗口,则closeButton的事件将被删除,但如果您提交表单,则事件将累积在closeButton上。为什么事件在一种情况下会累积,但在另一种情况下,行为正是我所期望的:添加一个事件,关闭后将其删除。表单按钮调用与closeButton相同的函数,但由于某种原因,该事件没有从closeButton中删除。
const button = document.querySelector('.btn');
const container = document.querySelector(".container");
button.addEventListener('click', () => {
container.style.display = "block"
const closeButton = container.querySelector(".container__close");
closeButton.addEventListener("click", close(container))
})
const form = container.querySelector("#form");
form.addEventListener('submit', close(container))
function close(elem) {
const closeButton = elem.querySelector(".container__close");
return function func (evt) {
evt.preventDefault();
elem.style.display = 'none';
closeButton.removeEventListener('click', func);
}
}
.btn {
margin-block-end: 15px;
}
.container {
display: none;
inline-size: 500px;
padding: 15px;
border: 5px black solid;
}
.container__close {
inline-size: 100px;
margin-block-end: 15px;
}
<button class="btn">Click</button>
<div class="container" >
<button type="button" class="container__close">X</button>
<form id="form">
<input type="text" placeholder="Имя" required>
<input type="text" name="description" placeholder="Фамилия" >
<button type="submit" class="button">Сохранить</button>
</form>
</div>