JavaScript代码在JSFIDLE中工作,但在.hta文件中不工作:getElementById返回未定义
我目前正在.hta文件中编写一个小的(html&javascript-)应用程序,但是document.getElementById在.hta应用程序中执行时似乎什么也不返回(未定义),但是当粘贴到jsfiddle中时,代码运行良好JavaScript代码在JSFIDLE中工作,但在.hta文件中不工作:getElementById返回未定义,javascript,html,jsfiddle,hta,Javascript,Html,Jsfiddle,Hta,我目前正在.hta文件中编写一个小的(html&javascript-)应用程序,但是document.getElementById在.hta应用程序中执行时似乎什么也不返回(未定义),但是当粘贴到jsfiddle中时,代码运行良好 <!DOCTYPE html> <html> <head> <script> ... (function (){loadDataFromFile();})(); function
<!DOCTYPE html>
<html>
<head>
<script>
...
(function (){loadDataFromFile();})();
function loadDataFromFile(){
...
try {
...
for(var i = 0; i < tmpReqs.length; i++){
...
addHTMLReq(i);
}
}catch(Err){
alert("File content contains errors.\n"+Err.message);
}
}
function addHTMLReq(reqID){
var req = reqs[reqID];
if(!req) return;
var contentElement = document.getElementById("main_table");
alert(contentElement.innerHTML); //To debug, already fails here.
var tr = document.createElement("tr");
tr.id = req.id;
var td_0 = document.createElement("td");
td_0.id = "date";
td_0.innerHTML = req.day + "/" + req.month + "/" + req.year;
tr.appendChild(td_0);
var td_1 = document.createElement("td");
td_1.id = "source";
td_1.innerHTML = reqSources[req.source];
tr.appendChild(td_1);
var td_2 = document.createElement("td");
td_2.id = "requirement";
td_2.innerHTML = req.requirement;
tr.appendChild(td_2);
contentElement.appendChild(tr);
}
</script>
</head>
<body>
<div id="category_definition">
<category id="cat0" name="My Category 1" topCat="none" />
</div>
<div id="content">
<div id="categories">
</div>
<table id="main_table">
<tr>
<th id="date">Date</th>
<th id="source">Source</th>
<th id="requirement">Description</th>
</tr>
<tr id="100">
<td id="date">28/01/2015</td>
<td id="source">src</td>
<td id="requirement">Lorem Ipsum dolores est</td>
</tr>
</table>
</div>
</body>
</html>
...
(函数(){loadDataFromFile();})();
函数loadDataFromFile(){
...
试一试{
...
对于(变量i=0;i
我省略了代码中无用的部分。使用的所有变量都已正确定义,唯一的问题在于document.getElementById、createElement等方法
有人知道问题出在哪里吗?用烹饪术语来说:你在做比萨饼之前试着把它吃掉
尝试引用元素时未创建该元素。在主体中的HTML之后添加脚本,或者在文档就绪或窗口加载时加载脚本 您的javascript在加载DOM之前启动,因此当它查找
document.getElementById(“main_table”)代码>,它返回未定义的
相反,在关闭body标记之前,将javascript移动到页面下方,如下所示:
<html>
<body>
<div id="main_table"></div>
<script>doStuffHere()</script>
</body>
</html>
多斯塔夫
你试着在做比萨饼之前把它吃掉。尝试引用元素时未创建该元素。在正文中的HTML之后添加脚本或将其加载到文档就绪状态。将
块作为
块中的最后一个元素。感谢您的回答!(而且,如果能够解释否决票的原因,那就太好了……如果我不知道我在第一个问题上做错了什么,我怎么能发布更好的问题……)正如你对折衷主义者答案的评论的旁注:这是一个HTA问题,attachEvent
在使用的文档模式(IE7)下工作良好,即使在使用IE11运行HTA时也是如此。