Предотвратить фокусировку целого узла с детьми

Проблема: если текущий активный элемент input#1, при нажатии клавиши Tab она переходит на input#2, но я хочу предотвратить весь div[tabindex=-1] с детьми быть сосредоточенным.

<div>
  <input id="1" type="text"> // jump from here
  <div tabindex="-1">
    <input id="2" type="text">
    <input id="3" type="text">
  </div>
</div>

<button>any focusable element</button> // to here

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

1 ответ

Вы можете использовать для этого contenteditable атрибут, а затем отключить это после расфокусировки

function edit(e){
  e.target.setAttribute("contenteditable",true);
}

function unedit(e){
  e.target.setAttribute("contenteditable",false);
}

[].slice.call( document.querySelectorAll(".unselect > div"),0).forEach((el)=>{
  el.addEventListener("click",edit);
  el.addEventListener("blur",unedit);
})
<div>
  <input id="1" type="text"> // jump from here
  <div tabindex="-1" class="unselect">
    <div id="2" >editable</div>
    <div id="3" >editable</div>
  </div>
    <input id="4" type="text"> // jump from here
</div>

Другие вопросы по тегам