gpt4 book ai didi

javascript - 使用 document.addEventListener 破坏 document.getElementById

转载 作者:行者123 更新时间:2023-12-01 01:59:57 25 4
gpt4 key购买 nike

真的希望有人能帮助我。长话短说,在这个网站上的一些回复中,我看到人们写道我们应该远离:

<body onLoad="init();">

在 HTML 中:

document.addEventListener("DOMCONTENTLOADED", init, false);

在 JavaScript 文件中,因此我们不会将交互式代码与内容代码等混合在一起。

但是通过切换到此方法,我的代码会中断,我无法再访问 DOM 树,这是一个示例:

function Tester(){
this.value1 = 10;
this.container = document.getElementById("fred");
this.list = this.container.childElementCount;
this.in_func = function(){
alert(this.value1+" "+ this.list);
};//end of this.in_func
}//end of function Tester
function init(){
var alpha = new Tester();
alpha.in_func();
}//end of function init

document.addEventListener("DOMCONTENTLOADED", init(), false);
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>

</head>

<body><!--onLoad="init();"-->
<section id="fred">
<section id="elem1"></section>
<section id="elem2"></section>
<section id="elem3"></section>
<section id="elem4"></section>
<section id="elem5"></section>
</section>
</body>
</html>

this.container 始终为 null,因此 childElementCount 会生成以下错误:

"Uncaught TypeError: Cannot read property 'childElementCount' of null"

然而,当我注释掉事件监听器并使用它有效的 onLoad 技术时,我只是在做一些愚蠢的事情吗?我尝试过使用变量而不是使用 this.list,尝试使用 querySelector 而不是 getElementById,我尝试过“load”而不是“DOMCONTENTLOADED”,但似乎没有任何效果。

我知道这将是非常简单的事情,但我无法在网上找到解决方案,也许我只是在寻找错误的东西。

请让我摆脱痛苦。

谢谢

禅宗

最佳答案

这是正确的做法:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script>

function Tester(){
this.value1 = 10;
this.container = document.getElementById("fred");
this.list = this.container.childElementCount;
this.in_func = function(){
alert(this.value1+" "+ this.list);
};//end of this.in_func
}//end of function Tester
function init(){
var alpha = new Tester();
alpha.in_func();
}//end of function init
document.addEventListener("DOMContentLoaded", function(event) {
init();
console.log("DOM fully loaded and parsed");
});

// document.addEventListener("DOMContentLoaded", init(), false);
</script>
</head>

<body>
<section id="fred">
<section id="elem1"></section>
<section id="elem2"></section>
<section id="elem3"></section>
<section id="elem4"></section>
<section id="elem5"></section>
</section>
</body>
</html>

在您的代码中,您调用了 init() 然后传递它,但您应该将它作为函数传递! document.addEventListener("DOMContentLoaded", init, false); 这就是为什么

关于javascript - 使用 document.addEventListener 破坏 document.getElementById,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50681846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com