Огонь событие только тогда, когда фокус перемещается за пределы любого из детей в Элементом

голоса
1

Я хочу , чтобы огонь событие , когда и только тогда , когда пользователь фокусирует где - то кроме дочернего элемента div, например , когда фокус передается от input1до input3:

<div onfocusout=console.log(document.activeElement)>
  <input type=text id=input1>
  <input type=text id=input2>
</div>

<input type=text id=input3>

Однако focusout мероприятие срабатывает даже тогда , когда фокус смещается в пределах элементов div, например , когда фокус передается от input1к input2. В довершение, document.activeElementвсегда решает bodyв момент focusout срабатывает (предполагая , что фокус катится весь путь назад к bodyпрежде чем перейти к input2) , так что я даже не могу вручную проверить , где новый фокус заканчивается перед focusout срабатывает.

Задан 02/09/2018 в 05:18
источник пользователем
На других языках...                            


1 ответов

голоса
1

Вы можете проверить relatedTargetсвойство объекта eventпередается в обработчик , чтобы увидеть , какой элемент получает новый фокус:

const container = document.querySelector('#container');
container.addEventListener('focusout', (e) => {
  console.log(e.relatedTarget);
  if (!container.contains(e.relatedTarget)) console.log('focus is now outside of container');
});
<div id="container">
  <input type="text" id="input1">
  <input type="text" id="input2">
</div>

<input type="text" id="input3">

Ответил 02/09/2018 в 05:22
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more