Javascript:无法访问变量

时间:2016-07-03 12:36:19

标签: javascript function variables

我无法从标记点访问变量。错误控制台表示该变量未声明。几年前我遇到了这个问题,我解决了这个问题,但是谷歌搜索了几个小时,我再也找不到解决方案了。 你有一个想法,问题是什么以及我如何解决它?

提前致谢。

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);
    }
});

1 个答案:

答案 0 :(得分:0)

在您提供的代码中,您可以访问smileys函数中的onclick数组,因为smileys是全局变量。您的问题是i事件中循环的onclick索引为8,超出范围。

解决这个问题的一个好方法是在每个i图像中保存smiley的值,然后在事件中访问它,如下所示:

&#13;
&#13;
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.value = i;

    smiley.onclick = function() {
      alert(smileys[this.value][0]);
    };

    $("#smileys").append(smiley);
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="smileys"></div>
&#13;
&#13;
&#13;