Javascript:can';t访问变量
我无法从标记点访问变量。错误控制台表示未声明该变量。我几年前就遇到了这个问题,我解决了它,但我在谷歌上搜索了几个小时,再也找不到解决方案了。 你有什么想法吗?问题是什么?我如何解决 提前谢谢Javascript:can';t访问变量,javascript,function,variables,Javascript,Function,Variables,我无法从标记点访问变量。错误控制台表示未声明该变量。我几年前就遇到了这个问题,我解决了它,但我在谷歌上搜索了几个小时,再也找不到解决方案了。 你有什么想法吗?问题是什么?我如何解决 提前谢谢 var smileys = [ [":smile:", "smile.png"], [":sad:", "sad.png"], [":love:", "love.png"], [":angry:", "angry.png"], [":amazed:", "amazed
var smileys = [
[":smile:", "smile.png"],
[":sad:", "sad.png"],
[":love:", "love.png"],
[":angry:", "angry.png"],
[":amazed:", "amazed.png"],
[":laugh:", "laugh.png"],
[":wink:", "wink.png"],
[":crying:", "crying.png"],
];
$(document).ready(function(){
for(var i=0; i<smileys.length; i++){
var smiley = document.createElement("img");
smiley.src = "./res/" + smileys[i][1];
smiley.style.width = "24px";
smiley.style.height = "24px";
smiley.onclick = function(){
alert(smileys[i][0]);
// $("#chat-input").append(smileys[i][0]);
};
$("#smileys").append(smiley);
}
});
var smileys=[
[“:smile:”,“smile.png”],
[“:sad:”,“sad.png”],
[“:love:”,“love.png”],
[“:angry:”,“angry.png”],
[“:惊奇:”,“惊奇.png”],
[“:laugh:”,“laugh.png”],
[“:wink:”,“wink.png”],
[“:crying:”,“crying.png”],
];
$(文档).ready(函数(){
对于您提供的代码中的(var i=0;i,您可以访问onclick
函数中的smileys
数组,因为smileys
是一个全局变量。您的问题是onclick
事件中循环的i
索引为8,超出范围
解决此问题的一个好方法是在每个smiley
图像中保存i
的值,然后在事件内部访问它,如下所示:
var smileys=[
[“:smile:”,“smile.png”],
[“:sad:”,“sad.png”],
[“:love:”,“love.png”],
[“:angry:”,“angry.png”],
[“:惊奇:”,“惊奇.png”],
[“:laugh:”,“laugh.png”],
[“:wink:”,“wink.png”],
[“:crying:”,“crying.png”],
];
$(文档).ready(函数(){
for(var i=0;i
您可以在其周围添加代码吗?这样我们就可以看到变量works的范围可能重复。使用(函数(i){smiley.onclick=function(){alert(smileys[i][0]);};})(i);
而不是smiley.onclick
行。您的问题不在于无法访问smileys
。当执行onclick
函数时,变量i
是数组外部的索引。当然,您可以访问onclick
函数中的数组,因为数组是全局的。您的问题是lem是超出范围的I
为8。如果您无法访问smileys
,您将得到ReferenceError:smileys未定义
。精确读取错误:这里有一个TypeError
。因此找到了所有变量,但您试图访问一个未定义值的属性,即ode>smileys[i]
。这是因为i
是8。谢谢,但结果是一样的。嗯……循环中的闭包或let
语句将是更好的解决方案;将任意属性存储到元素中(不使用数据-
属性)是一个奇怪且不稳定的解决方法…@Xufox如果你不想支持旧浏览器,你绝对可以使用数据-
属性。但是值
属性适用于所有浏览器。它不是一个“任意属性”,它是HTML规范的一部分。是的,但是图像没有值
属性。它不是全局属性。当然,您可以使用数据-
属性,这就是我排除它们的原因(“不使用数据-
属性”)这是一个奇怪的解决办法。@Xufox我想说的是,数据-
属性是HTML5的一部分,而“自定义”属性已经被所有浏览器支持很长时间了。是的,值
不是一个全局属性,所以如果将其添加到图像中,它将成为一个“自定义属性”。如果您希望您的代码更加现代,那么我完全同意您的看法,即使用数据-
属性是一种可行的方法。