Клик вне элемента div
Есть кастомный select, двух видов, с выбором одного значения и нескольких. Отслеживаю клик вне элемента с помощью @focusout
. Проблема в том что, при попытке выбрать значение в элементе с одинарным выбором, она сразу закрывается, срабатывает @focusout
и значение переопределяется через раз. При этом в элементе с мульти значением, все работает отлично.
Код на play.vuejs.org
Может есть какие-то другие альтернативы, как реализовать закрытие при клике вне элемента?
upd.
Понял что баг происходит, если кликать на input
, если вне инпута, а у самых границ элемента, то все окей
Ответы (1 шт):
Автор решения: Arteil
→ Ссылка
Нашел решение данному вопросу.
В основной JS файл нужно добавить директиву
const clickOutside = {
beforeMount: (el, binding) => {
el.clickOutsideEvent = event => {
// here I check that click was outside the el and his children
if (!(el == event.target || el.contains(event.target))) {
// and if it did, call method provided in attribute value
binding.value();
}
};
document.addEventListener("click", el.clickOutsideEvent);
},
unmounted: el => {
document.removeEventListener("click", el.clickOutsideEvent);
},};
createApp(App)
.directive("click-outside", clickOutside)
.mount("#app");
К компоненту (div)
<div class="custom-select" v-click-outside="someFunction()"></div>