Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Iteración con javascript y JSON crea elementos "undefined"

Estas en el tema de Iteración con javascript y JSON crea elementos "undefined" en el foro de Javascript en Foros del Web. Hola a todos, tengo un archivo .js un script que me llena un select iterando un arreglo JSON todo muy bien, pero tengo un inconveniente ...
  #1 (permalink)  
Antiguo 26/03/2016, 14:05
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 3 meses
Puntos: 3
Iteración con javascript y JSON crea elementos "undefined"

Hola a todos, tengo un archivo .js un script que me llena un select iterando un arreglo JSON todo muy bien, pero tengo un inconveniente y es que me crea más elementos con valores "undefined", he aquí el código:

Código Javascript:
Ver original
  1. var librerias = {
  2.   "data":
  3.   [
  4.         {
  5.           "main": "Types",        
  6.           "text":"Tipos de Datos",
  7.           "child":[
  8.               {"display": "Enteros, Ordinales", "value": "Ints"},
  9.               {"display": "Puntos Flotantes", "value": "Floats"},
  10.               {"display": "Cadenas, Char", "value": "Strings"},
  11.               {"display": "Punteros", "value": "Pointers"},
  12.               {"display": "Otros", "value": "Otros"}
  13.           ]
  14.          
  15.         },
  16.         {
  17.           "main": "Strings",        
  18.           "text": "Cadenas y Char",
  19.           "child":[
  20.             {"display": "Operaciones", "value": "Calcs" },
  21.             {"display": "Convertir desde", "value": "ConvsFrom" },
  22.             {"display": "Convertir hacia", "value": "ConvsTo" },
  23.             {"display": "Presentación", "value": "Display" }
  24.           ]
  25.          
  26.         },
  27.         {
  28.           "main": "PgmStruct",        
  29.           "text": "Estructura del Programa",
  30.           "child":[
  31.             {"display": "Control del Programa", "value": "Control" },
  32.             {"display": "Datos del Programa", "value": "Data" },
  33.             {"display": "Ciclos", "value": "Loops" },
  34.             {"display": "Lógica", "value": "Logic" },
  35.             {"display": "Orientado a Objetos", "value": "Object" }
  36.           ]
  37.          
  38.         },
  39.         {
  40.           "main": "Numbers",        
  41.           "text": "Números y Conjuntos",
  42.           "child":[
  43.             {"display": "Cálculos", "value": "Calcs" },
  44.             {"display": "Convertir Desde", "value": "ConvsFrom" },
  45.             {"display": "Convertir Hacia", "value": "ConvsTo" },
  46.             {"display": "Trigonometría", "value": "Trig" },
  47.             {"display": "Números por defecto", "value": "Values" },
  48.             {"display": "Presentación", "value": "Display" }
  49.           ]
  50.          
  51.         },
  52.         {
  53.           "main": "Options",        
  54.           "text": "Opciones",
  55.           "child":[
  56.             {"display": "Opciones de Control", "value": "Control" },
  57.             {"display": "Opciones de Datos", "value": "Data" }
  58.           ]
  59.          
  60.         },     
  61.         {
  62.           "main": "DatesAndTimes",        
  63.           "text": "Fechas y Tiempos",
  64.           "child":[
  65.             {"display": "Cálculos", "value": "Calcs" },
  66.             {"display": "Convertir Desde", "value": "ConvsFrom" },
  67.             {"display": "Convertir Hacia", "value": "ConvsTo" },
  68.             {"display": "Valores", "value": "Values" },
  69.             {"display": "Presentación", "value": "Display" }
  70.           ]
  71.          
  72.         },
  73.         {
  74.           "main": "Files",        
  75.           "text": "Archivos",
  76.           "child":[
  77.             {"display": "Operaciones", "value": "Control" },
  78.             {"display": "Acceso de Datos", "value": "Data" },
  79.             {"display": "Manejo", "value": "Strings" }
  80.           ]
  81.          
  82.         }, 
  83.  ]      
  84. }
  85.  
  86. //Cargamos el select principal
  87. for (var i in librerias.data) {
  88.     var elem = document.createElement("option");
  89.     elem.value = librerias.data[i].main;
  90.     elem.innerHTML = librerias.data[i].text;
  91.     document.getElementById("main_selection").appendChild(elem)
  92. }
  93.  
  94. //Aqui cargamos el segundo select de acuerdo a la selección del primero
  95. document.getElementById("main_selection").addEventListener("change", function () {
  96.     document.getElementById("sub_selection").innerHTML = "";
  97.     var rtl = document.getElementById("main_selection").options[document.getElementById("main_selection").selectedIndex].value;
  98.     if (rtl === "Seleccione Por Favor") {
  99.         var elem = document.createElement("option");
  100.         elem.value = "0";
  101.         elem.innerHTML = "Seleccione Por Favor";
  102.         document.getElementById("sub_selection").appendChild(elem);
  103.     }
  104.     for (var i in librerias.data) {
  105.         if (librerias.data[i].main === rtl) {
  106.             for (var a = 0; a < librerias.data[i].child.length; a++) {
  107.                 var elem = document.createElement("option");
  108.                 elem.value = librerias.data[i].child[a].value;
  109.                 elem.innerHTML = librerias.data[i].child[a].display;
  110.                 document.getElementById("sub_selection").appendChild(elem);
  111.             }
  112.         }
  113.     }
  114. });

El resutado es el siguiente:



Lo curioso es que lo he probado en jsFiddle.net y no sucede eso.

¿Alguna idea?.

Última edición por Fleon; 26/03/2016 a las 14:15
  #2 (permalink)  
Antiguo 26/03/2016, 14:51
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Iteración con javascript y JSON crea elementos "undefined"

He resuelto cambiando el siguiente código:

Código Javascript:
Ver original
  1. for (var i in librerias.data) {
  2.     var elem = document.createElement("option");
  3.     elem.value = librerias.data[i].main;
  4.     elem.innerHTML = librerias.data[i].text;
  5.     document.getElementById("main_selection").appendChild(elem);
  6. }

Por:

Código Javascript:
Ver original
  1. for (var i = 0; i < librerias.data.length; i++) {
  2.     var elem = document.createElement("option");
  3.     elem.value = librerias.data[i].main;
  4.     elem.innerHTML = librerias.data[i].text;
  5.     document.getElementById("main_selection").appendChild(elem);
  6. }

Ya no me crea esos elementos undefined.

Saludos.

Etiquetas: js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:18.