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
关键字。这只意味着您使其成为全局变量。不使用全局变量是一种很好的做法,但在这种情况下,它不会导致未定义