javascript - 我们如何在 javascript 中添加两个事件监听器 click 和 keydown
问题描述
我正在尝试同时使用 click 和 keydown ,但按键出现问题。如果我们可以在一个声明中加入这两个事件,是否有可能。
HTML
<audio id="Q" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3"> </audio>
<div>
<button name="Q">Q</button>
</div>
JavaScript
const queButton = document.querySelector("[name=Q]");
queButton.addEventListener("click", function() {
document.getElementById("Q").play();
});
queButton.addEventListener("keydown", function(e) {
if (e.key == 81) {
document.getElementById("Q").play();
}
});
解决方案
由于仅在按下特定键时才会播放音频,因此无法在click
和keydown
事件之间共享整个事件处理程序。
但是,可以定义playSoundQ()
为两个事件调用的可重用函数(即 ),如下所示:
/* Define reusable play sound function for both events */
function playSoundQ() {
document.getElementById("Q").play();
}
const qButton = document.querySelector("[name=Q]");
/* It's possible to pass the playSoundQ directly as the event handler
here, seeing there's no additional logic in the event handler */
qButton.addEventListener("click", playSoundQ);
/* Add keydown event listener to document rather than button */
document.addEventListener("keydown", function(e) {
/* Change to keyCode */
if (e.keyCode == 81) {
playSoundQ();
}
});
<audio id="Q" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3"></audio>
<div>
<button name="Q">Q</button>
</div>
另请注意,此处已应用了一些修复程序;keydown
侦听器被添加到而document
不是button
以确保基于键的播放响应浏览器中发生的所有键事件。e.key
处理程序中的也keydown
已更正,e.keyCode
以确保在按下“Q”键时播放。
希望有帮助!
推荐阅读
- sql - 将数据集成到现有的 SSAS 表格模型中
- css - 如何正常显示文本右侧的图像,但在移动设备上显示文本下方的图像?
- php - 对松散连接的数据进行排序,让人联想到单链表
- odoo-12 - 无法在odoo中确认销售订单
- php - 如何从 Microsoft Graph API 获取刷新令牌
- ios - PHAsset Null 但本地标识符有效
- java - 如何检查 Currency.getAvailableCurrencies() 是否包含我的字符串值?
- java - 怎么会有 reflect.field 库中一个 Field 的值?
- javascript - 在继续执行脚本之前获取函数的结果
- excel - Power Query:合并一个文件中的两个表并为一个文件夹中的所有文件重复过程?