eveniment de foc numai când focalizarea este mutat în afara oricărei dintre copiii unui element

voturi
1

Vreau să foc un eveniment atunci când și numai atunci când utilizatorul se concentrează în altă parte decât un element copil al div, de exemplu , atunci când focalizarea este transferată de input1la input3:

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

<input type=text id=input3>

Cu toate acestea, evenimentul focusout este declanșată chiar și atunci când schimbările de focalizare în interiorul elementelor div, de exemplu atunci când focalizarea este transferată de input1la input2. Pentru a face lucrurile și mai rele, document.activeElementrezolvă întotdeauna bodyla focusout instantanee este declanșată (ceea ce sugerează că focalizarea se rostogolește tot drumul înapoi la bodyînainte de a trece înapoi la input2) , așa că nu pot verifica chiar și manual , în cazul în care noua orientare se termină înainte de focusout este declanșat.

Întrebat 02/09/2018 la 05:18
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Puteți verifica relatedTargetproprietatea eventtrecut la handler pentru a vedea care element este obtinerea noul Focus:

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">

Publicat 02/09/2018 la 05:22
sursa de către utilizator

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