使用angular8单击选项卡时,如何使选项卡聚焦在第一个字段上

勃伦加拉尼

嗨,我共有6个标签,基于一个标签的点击,子标签会打开。子选项卡打开后,我希望焦点集中在每个选项卡的第一个子项上。我尝试通过获取第一个标签的ID并尝试在其中获取子标签ID。例如:第一个选项卡是details_basic_info其子选项卡包含tab-details_basic_info所以我试图通过添加'tab-'和点击它的动态获取的主标签的ID来使details_basic_info获取,但是我未能实现。谁能帮助我,如何做到这一点。

提前致谢。

演示:演示

克里斯·W

如果是我,我可能会做类似的事情(尽管方法处理的重复性稍差一些,但是嘿,这只是一个快速的js概念验证示例,例如与bootstrap捆绑在一起,但可以很容易地移植到有角度的),所以您不必只要在可聚焦数组中提供第一个可聚焦元素,它就不会在意。

希望这会有所帮助,加油!

const focusableList = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';

focusFirstFocusableChildPoC = (id) => {

  const contentPane = document.getElementById(id);

  if (contentPane) {
  
      const focusableElements = contentPane.querySelectorAll(focusableList),
            firstFocusable = focusableElements[0];          
            // Typescript will want this to be <HTMLElement>focusableElements[0]; to cast.

      window.setTimeout(function () {
          // Kick this to the back of the line with the 'ol 0 timeout trick.
          firstFocusable ? firstFocusable.focus() : notifyOfFailure();
      }, 0); 
      

  } else {
     notifyOfFailure(); 
  }
}

notifyOfFailure = () => {
  alert('NO FOCUS FOR YOU!');
}
.tab-content {
  padding: 2rem;
}

.tab-content *:focus {
  outline: red 3px dotted;
}

.tab-content *:focus:after {
  content: '*';
  margin-top: 1rem;
  color: red;
}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>


<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item">
    <a class="nav-link active" data-toggle="tab" href="#panel1" role="tab" onclick="focusFirstFocusableChildPoC('panel1')">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#panel2" role="tab" onclick="focusFirstFocusableChildPoC('panel2')">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#panel3" role="tab" onclick="focusFirstFocusableChildPoC('panel3')">Contact</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#panel4" role="tab" onclick="focusFirstFocusableChildPoC('panel4')">Contact</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#panel5" role="tab" onclick="focusFirstFocusableChildPoC('panel5')">Contact</a>
  </li>
</ul>

<div class="tab-content" id="myTabContent">
  <div class="tab-pane show active" id="panel1" role="tabpanel">
    <input placeholder="a text input" type="text">
    <button>A Button</button>
    <input type="checkbox">
    <input type="number">
  </div>
  <div class="tab-pane" id="panel2" role="tabpanel">
    <label><input type="checkbox"> Focus testing</label>
    <input type="text">
    <button>A Button</button>
    <input type="number">
  </div>
  <div class="tab-pane" id="panel3" role="tabpanel">
    <button>A Button</button>
    <input type="text">
    <input type="checkbox">
    <input type="number">
  </div>
  <div class="tab-pane" id="panel4" role="tabpanel">
    <a href="#">Test Anchor Link</a>
    <button>A Button</button>
    <input type="text">
    <input type="checkbox">
    <input type="number">
  </div>
  <div class="tab-pane" id="panel5" role="tabpanel">
    Nothing here to focus bro...
  </div>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android布局ActionbarSherlock选项卡+第一个选项卡上的ViewPagerIndicator

如何加载以在页面加载时显示Bootstrap选项卡而不先闪烁第一个选项卡?

ViewPager选项卡-当ViewPager不是第一个元素时使用ActionBar选项卡样式吗?

Angular Dynamic Mat选项卡-如何将新创建的选项卡添加为第一个选项卡

如何将一个选项卡固定为TPageControl上的第一个选项卡,并在浏览这些选项卡时使其保持显示状态?

Bootstrap选项卡第一个选项卡动态加载,而无需单击它

默认选项卡未显示选定的第一个选项卡

如何从第一个选项卡选择选项卡栏控制器的第二个选项卡?

选择第一个选项卡 - Laravel

Android-ViewPager-更改第二个选项卡时,在第一个选项卡上更新UI(滑动检测)

从 Angular 的第一个选项卡注销时,从第二个选项卡注销问题

当从一个字段中按下选项卡时,PHP自动填充字段

分别位于3个不同选项卡上的3个数据表,在加载后排列在选项卡上之后,在第一个选项卡上显示。如何解决呢?

从多个选项卡确定优先级后,如何获取特定行以复制到第一个选项卡/工作表上?

如何使用JavaScript激活第二个选项卡而不是第一个选项卡?

使用导航选项卡,当我在 React Bootstrap 中选择另一个选项卡时,总是选择第一个选项卡

如何从另一个选项卡上的场景中选择或弹出一个选项卡式应用程序中第一个选项卡的第二个场景?

带有材质选项卡的 Angular 8 - 在重新加载时选择最后一个活动选项卡

单击触发输入聚焦的另一个选项卡中的按钮时,动态更改选项卡活动

打开一个选项卡时如何删除其他选项卡

选择onchange HTML / PHP时加载到第一个选项卡

使用angularjs选项卡时如何在单击按钮时移动到下一个选项卡

当UITabBarController在屏幕上显示第一个选项卡时,调用什么方法?viewDidAppear不起作用

Angular5-PrimeNG-p表组件分页器选择的选项卡在数据重新加载时重置为第一个选项卡

Flutter Tabbar 在第一个和最后一个选项卡之间切换时构建/重建中间选项卡

Angular-冻结第一个选项卡,直到另一个选项卡完全加载

如何在第一个选项卡实例后删除所有字符?

如何默认打开第一个选项卡 Thymeleaf Css Bootstrap

如何使反应选项卡第一个索引处于活动状态