2017-01-12 15 views
4

私は素早くnoobの質問があります:私は配列の値を取得し、jQuery "html要素"に "Click"で印刷しようとしています。しかし、私は配列の要素を取得することはできません。それぞれのコンソールログはundefinedforループの配列値を取得できません

等、そう #item-0"red"の値を取得する必要があり、インデックス iで配列要素を取得する必要がアイテムをクリックしました。

var descriptions = ["red", "blue", "green", "purple", "white", "black"]; 
 

 
for (var i = 0; i < descriptions.length; i++) { 
 
    $("#item-" + i).on("click", function() { 
 
    var currentDescr = descriptions[i]; 
 
    console.log(currentDescr); 
 

 
    $("#footer-text").html(currentDescr); 
 
    }); 
 
};
.as-console-wrapper{top:0;max-height:100%;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

任意の助けいただければ幸いです。

+0

使用 'clossure'または' let'( 'I = 0ましょう。 ') –

+1

「コンソールは' '定義されていません '」という意味ですか?あなたのコードには 'console.log'ステートメントは見えません。 –

+0

これ以上具体的には?ありがとう! – Yoya01

答えて

2

のボタンをクリックすると、そのインデックスに値がないので、undefinedとなるので、その時点でループは壊れています()。

ブロックレベルのスコープを提供するvarの代わりにletを使用して解決できます。

var descriptions = ["red","blue","green","purple","white","black"]; 


for (let i = 0; i < descriptions.length; i++) { 
    $("#item-"+i).on("click", function(){ 
    var currentDescr = descriptions[i]; 
    console.log(currentDescr); 
    $("#footer-text").html(currentDescr); 
    }); 
}; 

又はclosure functionを使用して、引数としてiを渡します。

var descriptions = ["red","blue","green","purple","white","black"]; 


for (let i = 0; i < descriptions.length; i++) { 
    (function(index){ 
    $("#item-" + index).on("click", function(){ 
     var currentDescr = descriptions[index]; 
     console.log(currentDescr); 
     $("#footer-text").html(currentDescr); 
    }); 
    })(i); 
}; 
+1

ありがとう、そんなに!それはそれを解決しました! – Yoya01

2

ループはiの不正な値につながる、イベントが発生する前に仕上げている...これを試してみてください:

var descriptions = ["red","blue","green","purple","white","black"]; 


for (var i = 0; i < descriptions.length; i++) { 

    (function(i){ 
     $("#item-"+i).on("click", function(){ 

      var currentDescr = descriptions[i]; 
      console.log(currentDescr); 
      $("#footer-text").html(currentDescr); 

     }); 
    }(i)); 
}; 
+0

私はデモを行い、同じ問題に直面しましたが、あなたのソリューションは助けになりました。 https://jsfiddle.net/ohzcvqvk/ – locateganesh

関連する問題