Что поменять в скрипте блока, чтобы он закрывался при нажатии на body, а не id dropdownButton
Не могу сообразить, что нужно поменять в скрипте, чтобы атрибут data-show и класс show пропадали при нажатии на body, а не dropdownButton.
document.addEventListener("DOMContentLoaded", (() = > {
var e = document.getElementById("dropdownButton"),
n = document.getElementById("dropdownMenu");
const i = (0, t.createPopper)(e, n, {
placement: "bottom-start"
});
e.addEventListener("click", (function (t) {
t.preventDefault(),
n.hasAttribute("data-show") ? (n.removeAttribute("data-show"), n.classList.remove("show")) : (n.setAttribute("data-show", ""), n.classList.add("show"), i.update())
}))
}));
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
Можно предложить нечто такое...
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style>
.show {
display: none;
}
.show.on {
display: block;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', _ => {
const obt = document.querySelector('button')
obt.addEventListener('click', e => {
e.stopPropagation()
const o = document.querySelector('.show')
o.classList.add('on')
const ob = document.querySelector('body')
if (obt.dataset.on) return
ob.addEventListener('click', test, {once: true})
obt.dataset.on = 1
//
function test(e) {
o.classList.remove('on')
delete obt.dataset.on
}
})
})
</script>
</head>
<body>
<button>Test</button>
<p class='show'>Text</p>
</body>
</html>