为了测试目的,您总是可以添加调用alert()函数的语句。然而,在查看您的代码后,我不确定其中是否有实际调用该函数的任何内容。"onload"事件处理程序可能应该添加到动态创建部分中,在执行appendChild()之前。
我写了一些代码来进行一些动态脚本创建,它运行良好。我的代码有两个主要函数,一个创建脚本(一堆脚本),从“.js”文件加载数据,另一个按它们的名称顺序调用这些脚本中的函数(使用“eval()”函数)。您的函数没有任何我可以看到的名称...我知道很多人不喜欢使用eval()函数,但只要它调用的唯一内容是由您完全编写的内容,那么就应该没问题。
此代码使浏览器而非Web服务器动态创建可点击链接项的菜单(每个可点击链接看起来像普通超链接,但实际上是JavaScript构造,浏览器必须启用JavaScript才能让链接工作——但是它必须启用JavaScript才能创建菜单,所以没有问题!):
var F00, F01, F02, F03, F04, F05, F06, F07, F08, F09,
F10, F11, F12, F13, F14, F15, F16, F17, F18, F19;
var dat = new Array();
var form, script, str, st2, tmp, tmp2, dtno, indx, unde;
function initialize()
{ window.name="MyMenu";
form = document.getElementById('MENU');
for(indx=0; indx<20; indx++)
{ str = "0" + indx;
tmp = str.length - 2;
str = str.substr(tmp);
script = document.createElement('script');
script.type = 'text/javascript';
script.src = str + ".js";
form.appendChild(script);
}
window.setTimeout("BuildMenu();", 1000); //delay is necessary;
// scripts are actually only loaded after the function ends,
// and you need to allow time for it to finish
// before calling the functions in those scripts.
return;
}
请注意,此代码已准备好处理20个菜单项,即使您目前只有5个菜单项可供使用。如果某些最大的“.js”文件不存在,上述函数也不会崩溃。
function BuildMenu()
{ dtno = 0;
for(indx=0; indx<20; indx++)
{ str = "0" + indx;
tmp = str.length - 2;
str = "F" + str.substr(tmp);
tmp = eval(str);
if(tmp != unde)
dat[dtno++] = eval(str + "()");
}
dat.sort();
for(indx=0; indx<dtno; indx++)
{ str = "0" + indx;
tmp = str.length - 2;
str = "W" + str.substr(tmp);
tmp = document.getElementById(str);
tmp.innerHTML = "<a onclick=\"window.open('" + dat[indx][1] + "', 'MyMenu');\" style=\"color:#0000ff;text-decoration:underline;cursor:pointer;\">" + dat[indx][0] + "</a> " + dat[indx][2] + "<br />";
}
return;
}
在网页的HTML代码中,有这个:
<body onload="initialize();>
<br />
<form id="MENU" action="" onsubmit="return false;">
<span id="W00"> </span>
<span id="W01"> </span>
<span id="W02"> </span>
<span id="W03"> </span>
<span id="W04"> </span>
<span id="W05"> </span>
<span id="W06"> </span>
<span id="W07"> </span>
<span id="W08"> </span>
<span id="W09"> </span>
<span id="W10"> </span>
<span id="W11"> </span>
<span id="W12"> </span>
<span id="W13"> </span>
<span id="W14"> </span>
<span id="W15"> </span>
<span id="W16"> </span>
<span id="W17"> </span>
<span id="W18"> </span>
<span id="W19"> </span>
</form>
这里是“00.js”文件的一些示例代码:
<!--
function F00()
{ return ["Menu Item Alpha", "./Alpha.htm", "Select Web Page Alpha"];
}
-->
请注意,该函数仅返回3个数组元素(字符串)。BuildMenu()函数使用这些字符串构建网页上的菜单,部分通过修改span元素的innerHTML来实现。
script.text
中包含一个console.log()
。由于创建内联脚本时实际上没有加载任何内容,因此script.onload
永远不会被触发。如果您将脚本保存到文件中并使用src
加载它,则将触发onload
。为确保这一点,请在onload
定义之后移动appendChild()
。 - Teemuonload
事件,然后再将其添加到DOM
中!否则,onload
会在处理程序设置之前完成。 - Grimonload
事件,那么我将是第一个点赞的人......但是,IE11似乎在运行fiddle时会触发'onload'事件。 - Teemu