gpt4 book ai didi

javascript - Window.onload 范围问题

转载 作者:行者123 更新时间:2023-11-29 19:08:00 24 4
gpt4 key购买 nike

所以我一直在尝试创建一个函数,该函数可以使用我的 FetchAll 属性收集将 this.courses 中的所有数据推送到表体中,但由于某种原因我在 window.onloadFetchAll 函数中不断收到此错误:

cannot set innerHTML of undefined

但是,当我不使用 window.onload 并将 app.FetchAll() 放在应用程序范围之外时,在正文底部运行脚本,我可以完全访问 this.el

这是怎么回事?

var app = new function () {
// code

//we want to get each course by its id
this.el = document.getElementById('courses');


//this is all of our data in an array.
this.courses=['Biology', 'Chemistry','History','English','Spanish','Geography'];

//now we want to make the count function

this.Count = function (data) {
//the data is the input for waht we wanto count
var el = document.getElementById('courses');
var name = 'courses';

if (data) {
if (data > 1) {
// sets the name var to courses
name = 'courses';
}
el.innerHTML = data + '' + name;
} else {
el.innerHTML = 'No' + name;
}
}

this.FetchAll = function () {
var data = ''; // this is what we are going to put the html into
if (this.courses.length > 0) {
for (var i = 0; i < this.courses.length; i++) {
data += '<tr>';
data += '<td>' + this.courses[i] + '</td>';
data += '</tr>';
}
}
this.Count(this.courses.length);
return this.el.innerHTML = data;

};

this.Add = function (data) {

alert("add something")
}

}

window.onload = function () {
app.FetchAll();

}

最佳答案

这不是范围的问题,只是浏览器解释 HTML 文档时事情发生的时间问题。创建 app 的初始化代码对象在浏览器构建 DOM 之前运行。因此,.getElementById()电话正在返回 null .

当您将代码移动到 <body> 的末尾时它会起作用因为当代码在这种情况下运行时,DOM(大部分)被构建。

调用 FetchAll() 的位置如果您的代码位于底部,则可以在“加载”处理程序中。如果您将所有代码(包括 app 对象的构造)放入“加载”处理程序,那也可以。

关于javascript - Window.onload 范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41289885/

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