Foros del Web » Programando para Internet » Javascript »

Orden de un combo mal en chrome

Estas en el tema de Orden de un combo mal en chrome en el foro de Javascript en Foros del Web. Hola Cargo unos combos "select" y en chrome me muestra cualquier orden. for (id in matriz[valor]) { comboDestino.options[i] = new Option(matriz[valor][id], id); i++; } Alguien ...
  #1 (permalink)  
Antiguo 02/05/2011, 12:43
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Orden de un combo mal en chrome

Hola Cargo unos combos "select" y en chrome me muestra cualquier orden.

for (id in matriz[valor])
{
comboDestino.options[i] = new Option(matriz[valor][id], id);
i++;
}


Alguien tiene alguna idea....

Saludos.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #2 (permalink)  
Antiguo 02/05/2011, 14:41
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Orden de un combo mal en chrome

qué raro, aunque nunca lo hago así, yo uso esta forma y nunca me ha fallado:

Código Javascript:
Ver original
  1. for (id in matriz[valor]){
  2.     comboDestino.length++;
  3.     comboDestino.options[i].value=matriz[valor][id];
  4.     comboDestino.options[i].text=matriz[valor][id];
  5.     i++;
  6. }
  #3 (permalink)  
Antiguo 02/05/2011, 15:31
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Orden de un combo mal en chrome

lo ha probado en chrome 11 y funciona.
prueba con este
Cita:
<html>
<head>
<script typ="text/javascript">
window.onload = function() {
var mat = ['a', 'b', c = [1,2,3,4], 'd', 'e', 'f', 'g', 'h', 'i'];

var sel = document.getElementById("combox");

for(var i in mat[2]) {

var opt = document.createElement("option");
opt.value = i;
opt.text = mat[2][i];

sel.add(opt, null);
}

}
</script>
</head>
<body>
<select id="combox"></select>
</body>
</html>
  #4 (permalink)  
Antiguo 02/05/2011, 18:28
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Orden de un combo mal en chrome

buenas,
el estandar ecma dice que no hay norma sobre el orden que se deben enumerar las propiedades en un ciclo for/in. puede que tu caso sea la consecuencia de esto.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 03/05/2011, 06:52
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: Orden de un combo mal en chrome

Cita:
Iniciado por zerokilled Ver Mensaje
buenas,
el estandar ecma dice que no hay norma sobre el orden que se deben enumerar las propiedades en un ciclo for/in. puede que tu caso sea la consecuencia de esto.

Claro el problema no es el combo como lo muestra si no el FOR como lo recorre.
El tema es que no recorre la matriz en orden de agregado si no en el orden del ID solo.
No se como resolverlo por ahora :(

Gracias por la ayuda.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #6 (permalink)  
Antiguo 03/05/2011, 08:35
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Orden de un combo mal en chrome

Cita:
si no el FOR como lo recorre.
exactamente a eso me referia en la afirmacion anterior. de todos modos, no veo porque usar un bucle for/in en un array, y mas en tu caso que lo deseas por orden de entrada. utiliza un bucle for normal.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 03/05/2011, 10:05
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: Orden de un combo mal en chrome

Cita:
Iniciado por zerokilled Ver Mensaje
exactamente a eso me referia en la afirmacion anterior. de todos modos, no veo porque usar un bucle for/in en un array, y mas en tu caso que lo deseas por orden de entrada. utiliza un bucle for normal.

Lo intento con un for normal pero me da error en el length, no pasa de ahi
Se puede hacer length de un arrar dentro de otro?


for (temp = 0; temp <= matriz[valor].length; temp++) {

}
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #8 (permalink)  
Antiguo 03/05/2011, 10:39
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Orden de un combo mal en chrome

sí, claro. tomando el arreglo de mi anterior ejemplo
Cita:
for(var i = 0; i < mat[2].length; i++) {
document.getElementById('valores').innerHTML += mat[2][i];
}
  #9 (permalink)  
Antiguo 04/05/2011, 06:46
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: Orden de un combo mal en chrome

Me parece que lo que estoy haciendo mal es crear el array

matriz[1]={72: 'Apartamentos', 71: 'Casas', 17: 'Viviendas en Balnearios'}
Asi es como lo creo yo, pero al hacerlo asi me coloca apartamentos en el lugar 72 y todo asi.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #10 (permalink)  
Antiguo 04/05/2011, 07:11
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Orden de un combo mal en chrome

lo que intentas crear es un array de objetos. veamos si esto te resuelve algo
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<script type="text/javascript">
item = [ europa = [
{pais : 'españa',
email : 'www.url.com'},

{pais : 'portugal',
email : 'www.url.com'}
],

africa = [
{pais: 'marruecos',
email : 'www.url.com'},

{pais: 'congo',
email : 'www.url.com'},

{pais: 'tunez',
email : 'www.url.com'}
],

america = [
{pais : 'mejico',
email : 'www.url.com'},

{pais : 'honduras',
email : 'www.url.com'},

{pais : 'argentina',
email : 'www.url.com'},

{pais : 'brasil',
email : 'www.url.com'},
]
]



function fnc(it) {
for (var i = 0; i < item[it].length; i++) {
alert('país: ' +item[it][i].pais+ ' email: '+item[it][i].email);
}
}
</script>
</head>
<body>
<form>
<select onchange="fnc(this.selectedIndex)">
<option value="">europa</option>
<option value="">áfrica</option>
<option value="">america</option>
</select>
</body>
</html>
  #11 (permalink)  
Antiguo 04/05/2011, 09:16
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Orden de un combo mal en chrome

hola @isabelm,
tengo una curiosidad, ya que por segunda vez veo que asi lo haces. ¿por que defines un token en la declaracion de un array multidimensional? me refiero....
Código:
item = [ europa = [
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 04/05/2011, 13:06
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Orden de un combo mal en chrome

si tu pregunta va por el lado de alguna razón técnica, no es así. supongo que es por que cuando estás en los inicios, ves que alguien lo hace así, me pareció más legible y te acostumbras a ello. a mí esto me cuesta mas leerlo
Cita:
item = [ [
{pais : 'españa',
email : 'www.url.com'},

{pais : 'portugal',
email : 'www.url.com'}
],

[
{pais: 'marruecos',
email : 'www.url.com'},

{pais: 'congo',
email : 'www.url.com'},

{pais: 'tunez',
email : 'www.url.com'}
],

[
{pais : 'mejico',
email : 'www.url.com'},

{pais : 'honduras',
email : 'www.url.com'},

{pais : 'argentina',
email : 'www.url.com'},

{pais : 'brasil',
email : 'www.url.com'}
]
]
hay alguna diferencia en el rendimiento o ejecución??

un saludo
  #13 (permalink)  
Antiguo 04/05/2011, 13:33
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Orden de un combo mal en chrome

hola @isabel,
me parecio curioso que escribieras de esa forma y pense que quizas era simplemente estilo propio de escribir, como bien tu dices para facilitarte la lectura y comprehension. de hecho, pense que el codigo deberia dar error pero me equivoque. por otro, no creo que tenga algun efecto en el rendimiento. lo que si considero es que debes tener cautela o al menos estar conciente de que estas creando variables globales. y no es que sea un peligro grave, sino que dependiendo de la estructura o control que quieras manejar en tu codigo, podrias exponer los datos en el ambito equivocado. por ejemplo, si quieres los datos sean manipulados o leidos especificamente desde una funcion y que no se pueda accesar directamente, entonces tendrias que crear un closure con ese dato json. pero al tener declaracion de variables globales, entonces estos quedan expuestos.

si te sirve, puedes adoptar la tecnica mas comun, comentarios.
Código:
item = [ 

// europa ;
[
{pais : 'españa',
email : 'www.url.com'},

{pais : 'portugal',
email : 'www.url.com'}
],

// o alguna variante como la siguiente linea ;
[ // africa ;
{pais: 'marruecos',
email : 'www.url.com'},

{pais: 'congo',
email : 'www.url.com'},

{pais: 'tunez',
email : 'www.url.com'}
],

// america ;
[
{pais : 'mejico',
email : 'www.url.com'},

{pais : 'honduras',
email : 'www.url.com'},

{pais : 'argentina',
email : 'www.url.com'},

{pais : 'brasil',
email : 'www.url.com'},
]
] // item ;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #14 (permalink)  
Antiguo 04/05/2011, 14:13
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Orden de un combo mal en chrome

muchas gracias por tus comentarios. no era consciente de ello y tampoco había pensado en comentarlo

un saludo

Etiquetas: chrome, combo, orden
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 12:58.