こんにちは。
質問への追記、修正依頼の中で、
2018/02/12 16:51
jsonの型は'Object'です。
とのことでしたが、 for(var i in json)
で Object の json に対して
ループを回したときに、これが意図した順序で json
のプロパティが
取れるとは限りません。
MDN の for...in の説明 にも、以下が書かれています。
for..in 文は、指定したオブジェクトの列挙可能プロパティに対して、順不同で反復処理をします。
ですので、プログラムで明示的に意図した順序で、 要素を取り出すためには、
json
を配列として取得するようにAPIを見直すか、 API から JSONを
取得した後に配列にし直すという処理を入れたほうがよいかもしれません。
以上参考になれば幸いです。
補足1
stackoverflow の以下の質問
https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order
の回答で多数の Like がついているものに、ECMAScriptの仕様が以下のように引用されています。
4.3.3 Object
An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive value, object, or function. A function stored in a property of an object is called a method.
上記で、 unordered とあるので、for(var i in json)
で json のプロパティが
何らかの望ましい順序で取り出せると期待しないほうがよい、とはいえるでしょう。
他の回答を読むと、今現在の主要なjavaScript実装によっては、何らかの順序があるようですが、
今のところは、以下の回答に従うのがよさそうです。
ftor answered Jul 6 '16 at 7:38
Property order in normal Objects is a complex subject in Javascript.
** ・・・ **
** Conclusion: Even in ES2015 you shouldn't rely on the property order of normal objects in Javascript. It is prone to errors. Use Map instead. **
補足2
for..in
で、オブジェクトのプロパティを何らかの順序で取り出せることを期待するのは拙い、
ということを、上記で回答しましたが、それはそれとして、json[1]
で要素が取れる、つまり、
jsonのプロパティが整数なのであれば、以下のような修正をすると、意図通り動くかもしれません。
修正前
javascript
1//モーダル内の画像クリック時の処理
2for(var i in json){
3 $("#samplegazo").on('click','.test',function(){
4 //ここにクリックした画像のデータ(codeとname)を取得する処理を書きたいです。
5 $(':hidden[name="hiddenCode"]').val(json[i].code);
6 $('#nameselect').val(json[i].name);
7 });
8}
修正後
javascript
1
2$("#samplegazo .test").each(function(index, li) {
3 $(li).on('click', function() {
4 //ここにクリックした画像のデータ(codeとname)を取得する処理を書きたいです。
5 $(':hidden[name="hiddenCode"]').val(json[index].code);
6 $('#nameselect').val(json[index].name);
7 });
8});
9
ただし、 json のプロパティが 0,1,2,3 ・・・ のように 0 始まりで、かつ抜けている数字が
ないことが前提になります。