jquery 如何在使用键盘tab键输入div时执行某些操作

5lhxktic  于 2023-08-04  发布在  jQuery
关注(0)|答案(3)|浏览(104)

当使用键盘的tab键输入div时,我如何用jQuery“做些什么”?例如,当用户使用键盘tab按钮导航时,并且他们在下面的示例中输入“Inside”div,控制台日志不会触发,直到第二次按下tab按钮:

$('.inside').on('keydown', function(e) {
  if (e.keyCode === 9) {
    console.log('Inside');
  }
});
.inside {
  border: 1px solid black;
  margin: 10px;
  min-height: 300px;
  padding: 20px;
}

.outside {
  padding: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div class="outside text-center">
    <a href="">Outside Link 1</a>
    <a href="">Outside Link 2</a>
    <a href="">Outside Link 3</a>
    <a href="">Outside Link 4</a>
  </div>
  <div class="inside text-center">
    <a href="">Inside Link 1</a>
    <a href="">Inside Link 2</a>
    <a href="">Inside Link 3</a>
    <a href="">Inside Link 4</a>
  </div>
</div>
xhv8bpkk

xhv8bpkk1#

尝试使用:

$('.inside').on('keyup', function(e) {
  if (e.keyCode === 9) {
    console.log('Inside');
  }
});

字符串
基本上,当使用'keydown'时,触发函数的侦听器会在焦点进入.inside div后等待tab按钮被按下。因此,如果你需要在焦点移动到.inside div时立即触发函数,那么你可以检查tab按钮是否在.inside div中“向上”
UPD:如果你需要它只在第一个链接时被触发,那么像这样的东西应该可以工作(代码有点乱,但它确实可以满足你的需要)

$('.inside').on('keyup', function(e) {
  const el = document.querySelector('.inside>:first-child');
  if (e.keyCode === 9) {
    if (el === document.activeElement) {
      console.log('Inside');
    }
  }
});

q3qa4bjr

q3qa4bjr2#

你应该使用keyup事件。
请注意,keyCode弃用。最好使用key
在下面的示例中,event.currentTarget始终是div.inside元素。所以我们总是可以查询到:first-child并将其与event.target进行比较。

$('.inside').on('keyup', function({ currentTarget, key, target }) {
  if (
    key === 'Tab' &&
    $(target).get(0) === $(currentTarget).find('a:first-child').get(0)
  ) {
    console.log('Inside');
  }
});
.inside {
  border: 1px solid black;
  margin: 10px;
  min-height: 300px;
  padding: 20px;
}

.outside {
  padding: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div class="outside text-center">
    <a href="">Outside Link 1</a>
    <a href="">Outside Link 2</a>
    <a href="">Outside Link 3</a>
    <a href="">Outside Link 4</a>
  </div>
  <div class="inside text-center">
    <a href="">Inside Link 1</a>
    <a href="">Inside Link 2</a>
    <a href="">Inside Link 3</a>
    <a href="">Inside Link 4</a>
  </div>
</div>
pxiryf3j

pxiryf3j3#

监听DIV链接上的focus事件,如果前一个焦点元素在DIV之外,则对该事件做出React。适用于任何TAB导航方向和鼠标。

$('.inside a').on('focus', function(e) {
  if($(e.originalEvent.relatedTarget).parents('.inside').length){
    // focus is moved inside the div, so ignore
    return;
  }
  console.log('Inside');
  
});
:focus{
background:lightblue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div class="outside text-center">
  <a href="#">Outside Link 1</a>
  <a href="#">Outside Link 2</a>
  <a href="#">Outside Link 3</a>
  <a href="#">Outside Link 4</a>
</div>
<div class="inside text-center">
  <a href="#">Inside Link 1</a>
  <a href="#">Inside Link 2</a>
  <a href="#">Inside Link 3</a>
  <a href="#">Inside Link 4</a>
</div>
</div>

相关问题