JavaScript中的基本排序

时间:2012-06-27 01:08:15

标签: javascript

我是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()将不会执行。我知道这个问题可能是一个非常简单的逻辑明智......任何一个人?

2 个答案:

答案 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声明lvar