this.innerHTML 和 function(event) 与 eventListener 一起使用时的区别

Difference between this.innerHTML and function(event) when used with an eventListener

提问人:AlmiraHappy 提问时间:5/24/2023 最后编辑:Navitas28AlmiraHappy 更新时间:5/24/2023 访问量:28

问:

这是我第一次在这里发帖,所以如果这有点令人困惑,请原谅我:)

我是 Javascript 的新手,目前正在学习 Dr.Yu 的 Udemy Web 开发人员课程。 我很难理解 和 之间的区别。在我的理解中,事件将利用触发事件侦听器的事件,而这将为我提供触发事件的对象的身份。我觉得就我而言,它们都给了我触发事件的事物的身份,所以我不明白为什么我不能用于检测按下的按钮。 以下是我的代码:this.innerHTMLfunction(event)function (event)

// Detecting pressed button
for (var i = 0; i < document.querySelectorAll(".drum").length; i++) {
    document.querySelectorAll(".drum")[i].addEventListener("click", function(event) {
        makeSound(event.key);
    });
}
//detecting pressed keyboard 
document.addEventListener("keydown", function(event) {
    makeSound(event.key);
});

function makeSound(key) {
    switch (key) {
        case "w":
            var audio = new Audio('sounds/tom-1.mp3');
            audio.play();
            break;
        case "a":
            var audio = new Audio('sounds/tom-2.mp3');
            audio.play();
            break;
        case "s":
            var audio = new Audio('sounds/tom-3.mp3');
            audio.play();
            break;

        case "d":
            var audio = new Audio('sounds/tom-4.mp3');
            audio.play();
            break;


        case "j":
            var audio = new Audio('sounds/crash.mp3');
            audio.play();
            break;

        case "k":
            var audio = new Audio('sounds/snare.mp3');
            audio.play();
            break;

        case "l":
            var audio = new Audio('sounds/kick-bass.mp3');
            audio.play();
            break;

        default:
            console.log(buttenInnerHTML);

    }
}

检测按下按钮的正确代码如下:

检测按下的按钮 为什么我们不能也使用 function(event) 进行点击?

for (var i=0; i<document.querySelectorAll(".drum").length;i++){
document.querySelectorAll(".drum")[i].addEventListener("click",function(){
var buttenInnerHTML =this.innerHTML;
makeSound(buttenInnerHTML);

}); }

我试过这段代码,但它不能正常工作。

//Detecting pressed button 
for (var i=0; i<document.querySelectorAll(".drum").length;i++){
    document.querySelectorAll(".drum")[i].addEventListener("click",function(event){
    makeSound(event.key);});

    function makeSound (key){
    switch (key) {
    case "w":
        var audio = new Audio('sounds/tom-1.mp3');
        audio.play();
        break;
    case "a":
        var audio = new Audio('sounds/tom-2.mp3');
        audio.play();
        break;
    case "s":
        var audio = new Audio('sounds/tom-3.mp3');
        audio.play();
        break;
    
    case "d":
            var audio = new Audio('sounds/tom-4.mp3');
            audio.play();
            break;
        
            
    case "j":
            var audio = new Audio('sounds/crash.mp3');
            audio.play();
            break;
        
    case "k":
                var audio = new Audio('sounds/snare.mp3');
                audio.play();
                break;
           
    case "l":
                    var audio = new Audio('sounds/kick-bass.mp3');
                    audio.play();
                    break;

                default:console.log(buttenInnerHTML);
                
    }

}

javascript dom-events 事件侦听器

评论


答:

0赞 Unmitigated 5/24/2023 #1

event.key仅存在于诸如 .单击与按下的键无关,因此它不起作用。KeyboardEvent"keydown"

更实际地说,在这里按下按钮播放与按钮内容相对应的声音更有意义,可以通过(或更恰当地)访问。innerHTMLtextContent

评论

0赞 AlmiraHappy 5/25/2023
这是完全有道理的,我不确定为什么我以前不这么看。非常感谢!!