我对JS很陌生。我不确定为什么以下代码不适用于keypress
事件。 click
事件仍然有效。
//index.js
//Detecting Button Press
var numberOfDrumButtons = document.querySelectorAll(".drum").length;
for (var i = 0; i <= numberOfDrumButtons; i++) {
document.querySelectorAll(".drum")[i].addEventListener("click", function() {
var buttonInnerHTML = this.innerHTML;
makeSound(buttonInnerHTML);
});
}
//Detecting Keyboard Press
document.addEventListener("keypress", function(event){
makeSound(event.key);
});
function makeSound(key) {
switch (key) {
case "w":
var tom1 = new Audio("sounds/tom-1.mp3");
tom1.play();
break;
case "a":
var tom2 = new Audio("sounds/tom-2.mp3");
tom2.play();
break;
case "s":
var tom3 = new Audio("sounds/tom-3.mp3");
tom3.play();
break;
case "d":
var tom4 = new Audio("sounds/tom-4.mp3");
tom4.play();
break;
case "j":
var snare = new Audio("sounds/snare.mp3");
snare.play();
break;
case "k":
var crash = new Audio("sounds/crash.mp3");
crash.play();
break;
case "l":
var kickBass = new Audio("sounds/kick-bass.mp3");
kickBass.play();
break;
default:
console.log(buttonInnerHTML);
}
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Drum Kit</title>
<link rel="stylesheet" href="styles.css">
<link href="https://fonts.googleapis.com/css?family=Arvo" rel="stylesheet">
</head>
<body>
<h1 id="title">Drum Kit</h1>
<div class="set">
<button class="w drum">w</button>
<button class="a drum">a</button>
<button class="s drum">s</button>
<button class="d drum">d</button>
<button class="j drum">j</button>
<button class="k drum">k</button>
<button class="l drum">l</button>
</div>
<script src="index.js" charset="utf-8"></script>
</body>
<footer>
Made with ❤️ in London.
</footer>
</html>
但是,如果我将keypress
事件侦听器放在js文件的顶部,如下所示,它将起作用。 keypress
和click
事件均有效!没有涉及的jQuery库。我已经在Chrome和Firefox上进行了测试。
是否必须将事件侦听器添加到javascript文件中?如果没有,请向我解释可能的原因。
//index.js
//Detecting Keyboard Press
document.addEventListener("keypress", function(event){
makeSound(event.key);
});
//Detecting Button Press
var numberOfDrumButtons = document.querySelectorAll(".drum").length;
for (var i = 0; i <= numberOfDrumButtons; i++) {
document.querySelectorAll(".drum")[i].addEventListener("click", function() {
var buttonInnerHTML = this.innerHTML;
makeSound(buttonInnerHTML);
});
}
function makeSound(key) {
switch (key) {
case "w":
var tom1 = new Audio("sounds/tom-1.mp3");
tom1.play();
break;
case "a":
var tom2 = new Audio("sounds/tom-2.mp3");
tom2.play();
break;
case "s":
var tom3 = new Audio("sounds/tom-3.mp3");
tom3.play();
break;
case "d":
var tom4 = new Audio("sounds/tom-4.mp3");
tom4.play();
break;
case "j":
var snare = new Audio("sounds/snare.mp3");
snare.play();
break;
case "k":
var crash = new Audio("sounds/crash.mp3");
crash.play();
break;
case "l":
var kickBass = new Audio("sounds/kick-bass.mp3");
kickBass.play();
break;
default:
console.log(buttonInnerHTML);
}
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Drum Kit</title>
<link rel="stylesheet" href="styles.css">
<link href="https://fonts.googleapis.com/css?family=Arvo" rel="stylesheet">
</head>
<body>
<h1 id="title">Drum Kit</h1>
<div class="set">
<button class="w drum">w</button>
<button class="a drum">a</button>
<button class="s drum">s</button>
<button class="d drum">d</button>
<button class="j drum">j</button>
<button class="k drum">k</button>
<button class="l drum">l</button>
</div>
<script src="index.js" charset="utf-8"></script>
</body>
<footer>
Made with ❤️ in London.
</footer>
</html>