Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组未定义_Javascript_Arrays - Fatal编程技术网

Javascript数组未定义

Javascript数组未定义,javascript,arrays,Javascript,Arrays,我不断收到错误链接[I]未定义 我明确地定义了它,但它一直给我那个错误——有什么想法吗 我试图做5个链接,我有不引人注目的图像rolovers function loadImages(){ path = 'uploads/Splash-4/nav/'; links = new Array(); for (i=1;i<=5;i++){ var id = "link-"+i; var defaultState = '<img s

我不断收到错误
链接[I]未定义

我明确地定义了它,但它一直给我那个错误——有什么想法吗

我试图做5个链接,我有不引人注目的图像rolovers

function loadImages(){
    path = 'uploads/Splash-4/nav/'; 
    links = new Array();

    for (i=1;i<=5;i++){
        var id = "link-"+i;
        var defaultState = '<img src="' +path+i+'.jpg" border="0" />';
        links[i] = document.getElementById(id);

        // Place all image linksinto anchor
        links[i].innerHTML = defaultState;

        // What to do on mouseover
        links[i].onmouseover = function() { 
            links[i].innerHTML = '<img src="' +path+i+'a.jpg" border="0" />';
        }
        // What to do on mouse oUt
        links[i].onmouseout = function() {
            links[i].innerHTML = defaultState;
        }
    }
}
window.onload = loadImages;
函数loadImages(){
路径='uploads/Splash-4/nav/';
links=新数组();

对于(i=1;i),您的代码片段不包含变量链接的声明。如果您没有在其他地方定义它(即,如果它是局部变量),则需要在此处执行此操作:

而不是

links = new Array();
你可以

var links = new Array();
可以找到一个例子

如果你在其他地方声明过,可能是这一行

document.getElementById(id);

正在返回null。

您的代码段不包含变量链接的声明。如果您没有在其他地方定义它(即,如果它是局部变量),则需要在此处执行此操作:

而不是

links = new Array();
你可以

var links = new Array();
可以找到一个例子

如果你在其他地方声明过,可能是这一行

document.getElementById(id);

正在返回null。

问题是,当调用
onmouseover()
函数时,变量
i=6
,因为上一次迭代产生了
i=6
,导致循环结束。因此,必须在某处保护
i
。例如:

function loadImages(){
    path = 'uploads/Splash-4/nav/'; 
    var links = [];

    for (i=1;i<=5;i++){
        (function(j) {
            var id = "link-"+j;
            var defaultState = '<img src="' +path+j+'.jpg" border="0" />';
            links[j] = document.getElementById(id);

            // Place all image linksinto anchor
            links[j].innerHTML = defaultState;

            // What to do on mouseover
            links[j].onmouseover = function() { 
                links[j].innerHTML = '<img src="' +path+j+'a.jpg" border="0" />';
            }
            // What to do on mouse oUt
            links[j].onmouseout = function() {
                links[j].innerHTML = defaultState;
            }
        })(i);  // call the anonymous function with i, thus protecting it's value for
                // the mouseover/mouseout

    }
}
函数loadImages(){
路径='uploads/Splash-4/nav/';
var-links=[];

对于(i=1;i问题在于,当调用
onmouseover()
函数时,变量
i=6
,因为上一次迭代产生了
i=6
,导致循环结束。因此,必须在某处保护
i
。例如:

function loadImages(){
    path = 'uploads/Splash-4/nav/'; 
    var links = [];

    for (i=1;i<=5;i++){
        (function(j) {
            var id = "link-"+j;
            var defaultState = '<img src="' +path+j+'.jpg" border="0" />';
            links[j] = document.getElementById(id);

            // Place all image linksinto anchor
            links[j].innerHTML = defaultState;

            // What to do on mouseover
            links[j].onmouseover = function() { 
                links[j].innerHTML = '<img src="' +path+j+'a.jpg" border="0" />';
            }
            // What to do on mouse oUt
            links[j].onmouseout = function() {
                links[j].innerHTML = defaultState;
            }
        })(i);  // call the anonymous function with i, thus protecting it's value for
                // the mouseover/mouseout

    }
}
函数loadImages(){
路径='uploads/Splash-4/nav/';
var-links=[];

对于(i=1;i首先,你应该说:

var links = [];
通常不鼓励使用
数组
构造函数本身,如果不指定
var
,则会使
链接
变量驻留在全局空间中,这通常是不好的

现在,关于你的实际问题

您的事件处理程序正在从外部作用域中携带对
路径
i
变量的引用,但在实际遇到这些变量时,变量
i
的值为
6
——完全不是您想要的值!要解决此问题,您可以更改:

    // What to do on mouseover
    links[i].onmouseover = function() { 
        links[i].innerHTML = '<img src="' +path+i+'a.jpg" border="0" />';
    }
    // What to do on mouse oUt
    links[i].onmouseout = function() {
        links[i].innerHTML = defaultState;
    }
//鼠标悬停时要做什么
links[i].onmouseover=function(){
链接[i].innerHTML='';
}
//老鼠出来怎么办
links[i].onmouseout=function(){
链接[i].innerHTML=defaultState;
}

//鼠标悬停时要做什么
links[i].onmouseover=(函数(路径,i){
返回函数(){
链接[i].innerHTML='';
};
})(路径一);
//在mouseout上怎么办
links[i].onmouseout=(函数(i){
返回函数(){
链接[i].innerHTML=defaultState;
}
})(i) );

这将创建一个新的闭包来保存要捕获的变量。这样,内部的
i
仍然可以是,哦,
3
,而外部的
i
变为6。

首先,你应该说:

var links = [];
通常不鼓励使用
数组
构造函数本身,如果不指定
var
,则会使
链接
变量驻留在全局空间中,这通常是不好的

现在,关于你的实际问题

您的事件处理程序正在从外部作用域中携带对
路径
i
变量的引用,但在实际遇到这些变量时,变量
i
的值为
6
——完全不是您想要的值!要解决此问题,您可以更改:

    // What to do on mouseover
    links[i].onmouseover = function() { 
        links[i].innerHTML = '<img src="' +path+i+'a.jpg" border="0" />';
    }
    // What to do on mouse oUt
    links[i].onmouseout = function() {
        links[i].innerHTML = defaultState;
    }
//鼠标悬停时要做什么
links[i].onmouseover=function(){
链接[i].innerHTML='';
}
//老鼠出来怎么办
links[i].onmouseout=function(){
链接[i].innerHTML=defaultState;
}

//鼠标悬停时要做什么
links[i].onmouseover=(函数(路径,i){
返回函数(){
链接[i].innerHTML='';
};
})(路径一);
//在mouseout上怎么办
links[i].onmouseout=(函数(i){
返回函数(){
链接[i].innerHTML=defaultState;
}
})(i) );

这将创建一个新的闭包来保存要捕获的变量。这样,内部的
i
仍然可以是,哦,
3
,而外部的
i
变为6。

它会给你这个错误的哪一行?(使用Chrome的开发者控制台或firebug)当我做mousover时,它会给我一个错误:它抱怨这一行:links[I].innerHTML='';用[]而不是“new array()”实例化一个空数组会更干净。它给你这个错误的是哪一行?(使用Chrome的开发者控制台或firebug)当我做mousover时,它会给我一个错误:它抱怨这一行:links[I].innerHTML='';使用[]而不是“new array()”实例化空数组更为简洁javascript允许在不使用
var
关键字的情况下声明变量。这只是意味着您将其设置为全局变量。不使用全局变量是一个很好的做法,但在这种情况下不会导致
未定义的
。您是正确的。我实际上不知道……在过去和重构后,不这样做会导致我出现问题g(包括显式声明变量)我的代码工作正常,所以我认为这是一个问题。感谢您让我这样的人注意到这一点。是的,几乎总是最好使用
var
。这绝对是一个需要采用的重要标准实践。javascript允许在声明变量时不使用
var
关键字。这只意味着您使其成为全局变量。不使用全局变量是一种很好的做法,但在这种情况下,它不会导致
未定义