开发者问题收集

出现未捕获的类型错误:无法读取 null 的属性“getAttribute”,但代码正在运行

2018-08-23
2870

我制作了一个音板网站,其中包含许多小音频片段和下面的 Javascript,用于播放、暂停和在播放完毕后重置它们。页面完全按预期运行,但我的 Javascript 控制台中出现

index.html:90 Uncaught TypeError: Cannot read property 'getAttribute' of null

错误,我不知道原因。

cliplist = ['audio1','audio2','audio3','audio4','audio5','audio6','audio7','audio8'];
playerlist = ['player1','player2','player3','player4','player5','player6','player7','player8'];

document.addEventListener("DOMContentLoaded", function() 
{
    for(let i=0;i<cliplist.length;i++)
    {
        document.getElementById(playerlist[i]).addEventListener("click", function()
        {
            playClip(cliplist[i]);
        })

        document.getElementById(playerlist[i]).addEventListener("click", function()
        {
            playClip(cliplist[i],playerlist[i]);
        })

                document.getElementById(cliplist[i]).addEventListener("ended", function()
        {
            reset(playerlist[i]);
        })
    }
});

function playClip(theclip,theplayer)
{
    playerElement = document.getElementById(theplayer);
    clipElement = document.getElementById(theclip)

    if(playerElement.getAttribute("src") == 'playbutton.png')
    {
        playerElement.setAttribute("src","pausebutton.png");
        clipElement.play();
    }
    else
    {
        playerElement.setAttribute("src","playbutton.png");
        clipElement.pause();        
    }

}

function reset(theplayer)
{
    document.getElementById(theplayer).src = 'playbutton.png';  
}
1个回答

您有一个对 playClip 的调用,如下所示:

playClip(cliplist[i]);

它只传递一个参数。但是, playClip() 需要第二个参数,这就是 .getElementById() 所使用的参数,它获取调用 .getAttribute() 的 DOM 元素。如果您不传递参数,则不会获取 DOM 元素,并且会收到错误。

因此,请确保向其传递它正在寻找的两个参数,就像您在其他位置编写的那样:

playClip(cliplist[i],playerlist[i]);

最后,它仍然有效的原因是您向 document.getElementById(playerlist[i]) 添加了两个 click 事件处理程序。第一个会抛出错误,而第二个则有效。

Scott Marcus
2018-08-23