在有多个焦点元素的DOM中。用户可以使用tab键遍历焦点元素,也可以使用shift + tab键遍历反转。
监听focusin事件,我们如何知道它是由TAB还是Shift TAB触发的?
document.querySelector('#sample').addEventListener('focusin', function(){
if(isFromTAB){
// DO traverse
}else{
// DO different thing
}
});
可以查看事件的relatedTarget
属性。对于focusin
事件,relatedTarget
属性标识失去焦点的元素:
document.querySelector('#b').addEventListener('focusin', (e) => {
if (e.relatedTarget?.id === 'a') {
console.log('tab');
} else if (e.relatedTarget?.id === 'c') {
console.log('shift tab');
}
});
<input id="a">
<input id="b">
<input id="c">