Javascript TypeError:值未实现接口EventListener

Javascript TypeError:值未实现接口EventListener,javascript,html,firefox,Javascript,Html,Firefox,这在IE和Chrome中都可以找到,但是在Firefox中,我得到了一个错误: “TypeError:值未实现接口EventListener。” 这段代码是由一个php脚本发布的,因此我必须添加if语句来确定id是否存在,以避免在Chrome中出现错误 代码如下: HTML 注销 JavaScript if (document.getElementById("Logout") != null) { var Logout_Link = document.getElementById("Lo

这在IE和Chrome中都可以找到,但是在Firefox中,我得到了一个错误:

“TypeError:值未实现接口EventListener。”

这段代码是由一个php脚本发布的,因此我必须添加if语句来确定id是否存在,以避免在Chrome中出现错误

代码如下:

HTML
注销

JavaScript

if (document.getElementById("Logout") != null) {
    var Logout_Link = document.getElementById("Logout");
    Logout_Link.addEventListener('click', Logout, true);

    function Logout() {            
        var just_logged_out = 1;
        window.location.href = "logout-redirect.php";
    }
}
这是无效的。函数声明必须位于函数或程序体的顶层,位于块内部。将其移到if语句之外:

function Logout() {            
    var just_logged_out = 1;
    window.location.href = "logout-redirect.php";
}

if (document.getElementById("Logout") != null) {
    var Logout_Link = document.getElementById("Logout");
    Logout_Link.addEventListener('click', Logout, true);
}
那么,如果函数没有正确声明,那么奇怪的错误消息是什么?您可能期望出现类似
错误参数错误:处理程序是“未定义的”
。但事实并非如此。这实际上并没有实现
EventListener
接口(JavaScript函数可以)

这是无效的。函数声明必须位于函数或程序体的顶层,位于块内部。将其移到if语句之外:

function Logout() {            
    var just_logged_out = 1;
    window.location.href = "logout-redirect.php";
}

if (document.getElementById("Logout") != null) {
    var Logout_Link = document.getElementById("Logout");
    Logout_Link.addEventListener('click', Logout, true);
}

那么,如果函数没有正确声明,那么奇怪的错误消息是什么?您可能期望出现类似
错误参数错误:处理程序是“未定义的”
。但事实并非如此。这确实没有实现
EventListener
接口(JavaScript函数可以实现)。

addEventListener('click',Logout,true)??为什么这是真的?在这种情况下,它实际上并不重要。我只是养成了这个习惯,因为false在其他代码上把事情搞砸了。我会改变它,看看它是否会改变它,尽管我不知道为什么会。你为什么反对它?它是否占用了太多的内存/处理能力?我更改了它,我也遇到了同样的问题。单击“注销”根本不做任何事情(仅在Firefox中)。最好先获取一个元素,然后在if语句中检查值是否为null
var Logout_Link=document.getElementById(“Logout”);如果(注销链接){/*…*/}
addEventListener('click',Logout,true)??为什么这是trueWell,在这种情况下它实际上并不重要。我只是养成了这个习惯,因为false在其他代码上把事情搞砸了。我会改变它,看看它是否会改变它,尽管我不知道为什么会。你为什么反对它?它是否占用了太多的内存/处理能力?我更改了它,我也遇到了同样的问题。单击“注销”根本不做任何事情(仅在Firefox中)。最好先获取一个元素,然后在if语句中检查值是否为null
var Logout_Link=document.getElementById(“Logout”);如果(注销链接){/*…*/}
,那确实是问题所在。谢谢,谢谢你的解释。我将确保在将来的代码中不包含依赖于某个条件的函数;但是您必须确保它是一个函数表达式,您(有条件地)将它指定给某个变量。看,这不是无效的。只是不严格。(有理由)这确实是问题所在。谢谢,谢谢你的解释。我将确保在将来的代码中不包含依赖于某个条件的函数;但是您必须确保它是一个函数表达式,您(有条件地)将它指定给某个变量。看,这不是无效的。只是不严格。(有理由。)