我是JavaScript的新手,所以请耐心等待......
我有一个链接到我的HTML的外部JavaScript文档(在HTML文档的头部调用)。
在我的JavaScript文档中,我在window.onload
事件上调用了两个函数:
window.onload = function() {
selected_state();
viewer();
};
function selected_state() {
var titleAr = document.getElementsByTagName("title");
var aAr = document.getElementsByTagName("a");
// Take the first element of title array. Check if it matches
// the first element of link array.
for (i = 0; i <= titleAr.length; i++) {
for (l = 0; l <= aAr.length; l++) {
if (titleAr[i].innerHTML === aAr[l].innerHTML) {
aAr[l].style.color = "#C33";
break;
}
}
}
};
function viewer() {
var imgAr = document.getElementsByTagName("img");
for (var i = 0; i < imgAr.length; i++) {
imgAr[i].onmouseover = function() {
this.style.border = "1px solid #CCC";
}
}
};
第一个函数运行没有问题,但第二个函数没有运行。如果我切换它们,那么viewer()
是第一个,那么selected_state()
将不会执行。我知道这个问题可能是一个非常简单的逻辑明智......任何一个人?
答案 0 :(得分:1)
当内循环在外循环的第一次运行中完成时,看起来selected_state
正在破坏;您的循环条件不正确(必须抛出类似“索引越界”的内容)。
数组使用从零开始的索引:
变化:
for (i=0; i <= titleAr.length; i++) {
for (l=0; l <= aAr.length; l++) {
要:
for (i=0; i < titleAr.length; i++) {
for (l=0; l < aAr.length; l++) {
答案 1 :(得分:0)
唯一的解释是,两个函数在执行任何操作之后都会抛出异常,这会使您认为它们运行没有问题。除非他们抛出异常,首先是第一个将运行,然后第二个将运行。你没有遗漏任何基本的逻辑错误。但是,如果第一个函数抛出异常,则将控制转移到下一个异常捕获帧,如果你没有通过try...catch
定义一个异常捕获帧,那么它将在你的代码之外。
您最好的选择是使用一个体面的调试器来查找正在发生的事情。现在所有主流浏览器都内置了不错的调试器。在IE和Chrome中,按F12打开调试器;在其他浏览器中,查看菜单。调试器将有一个“控制台”,报告错误。您还可以设置断点并逐个语句地遍历代码。
(现在编辑你发布了代码。)
请注意,selected_state
中的代码会成为The Horror of Implicit Globals的牺牲品。您需要使用i
声明l
和var
。