在 JavaScript 中检测和处理 Tab 键的按下情况
JavaScript 具有检测键盘按键的内置方法以及处理这些事件的多种方法。你可以在整个代码中设置事件侦听器,这是确保所需事件仅在选择正确元素时发生的好方法。
也就是说,特定的键盘键在大多数浏览器中具有预定的功能——实际上在大多数操作系统上也是如此。例如,在大多数浏览器中使用 F1 会打开一个帮助页面,而 F5 键会刷新当前页面。
Tab
键也是如此,它用于在大多数浏览器中循环浏览超链接和文本框。但是,你仍然可以使用 JavaScript 检测此事件并在按下 Tab
键时执行特定操作。例如,你可能想要对选定的超链接做一些事情,甚至在用户使用 Tab
切换到它时更改文本输入的属性。
以下是如何为 Tab
键添加事件侦听器的示例:
<a href="https://www.delftstack.com/">Test Link 1</a>
<a href="https://www.delftstack.com/contact/">Test Link 2</a>
<a href="https://www.delftstack.com/about-us/">Test Link 3</a>
document.addEventListener("keyup", detectTabKey);
function detectTabKey(e) {
if (e.keyCode == 9) {
activeElem = document.activeElement;
console.log(activeElem.href);
}
}
输出:
"https://www.delftstack.com/"
"https://www.delftstack.com/contact/"
"https://www.delftstack.com/about-us/"
上面的 JavaScript 代码有两个工作部分:
你们中的一些人可能已经发现了之前方法的一个问题:如果我们的网页有输入文本框会发生什么?如果是这种情况,按下 Tab
键也将在它们之间循环,并且由于它们没有 href
属性,我们的功能将无法按预期工作。
值得庆幸的是,如果是这种情况,JavaScript 不会抛出错误,但无论何时选择文本输入,它都会打印出 undefined
。为了确保不会发生这种情况,我们需要在 detectTabKey()
函数中添加一个步骤。
让我们在 HTML 代码中添加一个新元素:
<a href="https://www.delftstack.com/">Test Link 1</a>
<a href="https://www.delftstack.com/contact/">Test Link 2</a>
<a href="https://www.delftstack.com/about-us/">Test Link 3</a>
<input type="text" placeholder="Text Box">
如果我们保持与以前相同的 JavaScript 代码,输出将如下所示:
输出:
"https://www.delftstack.com/"
"https://www.delftstack.com/contact/"
"https://www.delftstack.com/about-us/"
undefined
为了解决这个问题,我们需要在我们的 detectTabKey()
函数中添加另一个 if
语句。这是最终代码:
document.addEventListener("keyup", detectTabKey);
function detectTabKey(e) {
if (e.keyCode == 9) {
activeElem = document.activeElement;
if (activeElem.tagName.toLowerCase() == "a") {
console.log(activeElem.href);
}
}
}
输出:
"https://www.delftstack.com/"
"https://www.delftstack.com/contact/"
"https://www.delftstack.com/about-us/"
文本框即使被选为活动元素也不会触发我们的函数,因为它不满足新条件。因此,如果当前活动元素附加了 a
标签,代码只会打印出 href
属性。我们还添加了 .toLowerCase()
方法以确保我们不会错过任何元素。
相关文章
在 Angular 中上传文件
发布时间:2023/04/14 浏览次数:71 分类:Angular
-
本教程演示了如何在 Angular 中上传任何文件。我们还将介绍如何在文件上传时显示进度条,并在上传完成时显示文件上传完成消息。
Angular 中所有 Mat 图标的列表
发布时间:2023/04/14 浏览次数:91 分类:Angular
-
本教程演示了在哪里可以找到 Angular 中所有 Mat 图标的列表以及如何使用它们。
Angular 2 中的复选框双向数据绑定
发布时间:2023/04/14 浏览次数:139 分类:Angular
-
本教程演示了如何一键标记两个复选框。这篇有 Angular 的文章将着眼于执行复选框双向数据绑定的不同方法。
在 AngularJS 中重新加载页面
发布时间:2023/04/14 浏览次数:142 分类:Angular
-
我们可以借助 windows.location.reload 和 reload 方法在 AngularJS 中重新加载页面。
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 AngularJS 中启用 HTML5 模式
发布时间:2023/04/14 浏览次数:150 分类:Angular
-
本文讨论如何在 AngularJS 应用程序上启用带有深度链接的 HTML5 模式。
在 AngularJs 中加载 spinner
发布时间:2023/04/14 浏览次数:107 分类:Angular
-
我们将介绍如何在请求加载时添加加载 spinner,并在 AngularJs 中加载数据时停止加载器。
在 Angular 中显示和隐藏
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程演示了 Angular 中的显示和隐藏。在开发商业应用程序时,我们需要根据用户角色或条件隐藏一些数据。我们必须根据该应用程序中的条件显示相同的数据。
在 Angular 中下载文件
发布时间:2023/04/14 浏览次数:104 分类:Angular
-
本教程演示了如何在 angular 中下载文件。我们将介绍如何通过单击按钮在 Angular 中下载文件并显示一个示例。