Javascript and jQuery arrays undefined
我试图设置一个数组,但是当我使用
一旦我尝试使用
但由于img也不起作用,我不知道发生了什么。
1 2 3 4 5 6 7 8 9 10 | $(window).on('load', function(){ var x = 0; var img = []; $(".gallery_img").each(function(img){ var image = new Image(); image.src = $(this).attr("src"); x = x + 1; img[x] = image.src; console.log(img); console.log($(this).attr("src")); |
我对jquery和javascript很新,所以我非常感谢一些具体的解释,而不仅仅是解决方案。 我希望我已经足够具体,而不是重复
尝试将数组变量
因为你在函数中使用了相同的变量:
来自@ guest271314的评论。
之所以打印计数而不是路径,是因为
好吧,当你认为你将声明的数组传递给匿名函数时
实际上你用这段代码定义了新的局部变量
因为这个函数是一个应该有输入参数的回调函数,它将由
现在你做了什么,你已经在函数范围内定义了你的数组
然后将另一个变量定义为将在此函数范围内使用的输入参数:
我猜你试图将这个变量传递给这个函数,但这是不必要的,因为你已经在更广泛的范围内声明了它,并且这个变量已经在函数范围内可用了。
关于javascript变量范围的真相
当您将此变量定义为回调函数参数时,您将获取新的局部变量
所以你实际上要做的是:
1 2 3 4 5 6 7 8 9 10 11 12 | $(window).on('load', function(){ var x = 0; var img = []; $(".gallery_img").each(function(ind, val){ var image = new Image(); image.src = $(this).attr("src"); // Unnecessary, we already have index - ind, unless you use some filtering. // So you could get rid of x variable and use ind instead, like img[ind] = image.src x = x + 1; //<- x becomes 1 img[x] = image.src; //<- img[0] is undefined as img[1] is where the index began. console.log(img); console.log($(this).attr("src")); |
另外,我建议你习惯使用jsfiddle来设置你的示例代码,这将帮助你调试你的代码和我们来帮助你的实际样本。
在有机会将图像添加到索引0之前,您正在递增数组。
1 2 3 4 5 6 7 8 9 10 | $(window).on('load', function(){ var x = 0; var img = []; $(".gallery_img").each(function(img){ var image = new Image(); image.src = $(this).attr("src"); x = x + 1; //<- x becomes 1 img[x] = image.src; //<- img[0] is undefined as img[1] is where the index began. console.log(img); console.log($(this).attr("src")); |
尝试将代码更改为此。
1 2 3 4 5 6 7 8 9 | $(window).on('load', function(){ var x = 0; var img = []; $(".gallery_img").each(function(img){ var image = new Image(); image.src = $(this).attr("src"); img[x++] = image.src; //this will increment x after the value x is used. console.log(img); console.log($(this).attr("src")); |