Foros del Web » Programando para Internet » Javascript »

Funciona en Firefox, pero no en IE

Estas en el tema de Funciona en Firefox, pero no en IE en el foro de Javascript en Foros del Web. no encuentro el fallo por el que no funciona en IE. Código PHP: function  tratarErrores (){      listas  =  document . getElementsByTagName ( 'select' ); ...
  #1 (permalink)  
Antiguo 24/07/2007, 18:36
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Funciona en Firefox, pero no en IE

no encuentro el fallo por el que no funciona en IE.

Código PHP:
function tratarErrores(){
    
listas document.getElementsByTagName('select');
    
errores = new Array(6);
    
id = new Array(6);
    
tipos = ['tipo1','tipo2','tipo3','tipo4','tipo5','tipo6'];
    
id_general = ['Tipos1','Tipos2','Tipos3','Tipos4','Tipos5','Tipos6'];
    
divErrores document.getElementById("errores");
    for(
i=0;i<listas.length;i++){
        
indice listas[i].selectedIndex;
        
errores[i] = listas[i].options[indice].text;
        
id[i] = "label_"+id_general[i];
    }
    var 
numErrores 0;
    for(var 
i in errores){
        if(
errores[i] == "Elige..."){
        
document.getElementById(id[i]).style.color 'red';
                    ++
numErrores;
        }
        else
        
document.getElementById(id[i]).style.color '';
    } 
    if(
numErrores == 0)
     return 
true;
    else
                 return 
false;


alguna ayuda?

Saludos

Última edición por wigglyUtrera; 25/07/2007 a las 19:27
  #2 (permalink)  
Antiguo 25/07/2007, 07:27
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Funciona en Firefox, pero no en IE

Es posible que sea esta línea:
Código PHP:
listas document.getElementsByTagName('select'); 
Al ser el name igual que el nombre de una etiqueta HTML, IE se lía.

Prueba poniendo alerts por todas partes y evaluando cada variable poco a poco.


Un saludo.


PD:
Cita:
Iniciado por wigglyUtrera
if(errores[i] == "Elije..."){
Código:
if(errores[i] == "Elige..."){
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 25/07/2007, 10:43
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: Funciona en Firefox, pero no en IE

He estado poniendo ALERT y salen todos los alert hasta esta linea:

Código:
id[i] = "label_"+id_general[i];
De ahi palante, no sale ninguno.

PD: Gracias por la correccion (Elige...), no me habia dao cuenta.

Saludos
  #4 (permalink)  
Antiguo 25/07/2007, 15:53
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Funciona en Firefox, pero no en IE

En ese caso tendríamos que tener cuidado en los valores que toma i, porque
Código PHP:
for(i=0;i<listas.length;i++){ 
En ese caso, i va de 0 hasta la cantidad de <select>'s en el documento. Por otra parte, tenemos definido que el array id tenga longitud 6... habría que ver si se pasa de 6 el valor de i.

Otra cosa es que no te recomiendo utilizar como nombre de variable id, más que nada por si acaso. Utiliza losIds o algo por el estilo que te provoque menos quebraderos... sólo para eliminar posibles errores.

Aunque no descarto que el error se encuentre en la línea anterior:
Código PHP:
errores[i] = listas[i].options[indice].text
Prueba alertando su valor.



Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 25/07/2007, 18:33
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: Funciona en Firefox, pero no en IE

He probado cambiando el nombre de id por id_general y sigue igual
He alertado el valor de errores[i] y es correcto...

Hay 6 select en la pagina.


Saludos
  #6 (permalink)  
Antiguo 26/07/2007, 02:50
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Funciona en Firefox, pero no en IE

Cita:
Iniciado por wigglyUtrera Ver Mensaje
He probado cambiando el nombre de id por id_general y sigue igual
Hombre, si ya tienes en el script una variable que se llama id y otra id_general, si cambias id por id_general nos quedamos con dos variables con el mismo nombre (id_general)!



En este caso sería mejor que nos postearas un poquito de código HTML, lo suficiente como para que podamos testearlo en nuestras máquinas y te podamos asesorar un poquito mejor.. También estaría bien que nos explicases tus propósitos, quizá haya una manera más cómoda de hacerlo.

Viendo el código tal y como está, creo que te podrías ahorrar el segundo for (ten en cuenta que primero recorres los selects, de 0 a 5 y estableces errores[0..5]. Luego recorres los errores (0 a 5), que tendrá los mismos índices que el primer for.

Yo diría que te puedes ahorrar hasta las variables errores, id, id_general y tipos, sabiendo que es una cadena y el valor de la variable de iteración i adjuntado al final. Y si el valor de numErrores no lo vas a utilizar salvo para mirar (numErrores == 0), ¿no sería más lógico que fuera un boolean? Al fin y al cabo, lo que haces al final es equivalente a return (numErrores == 0)

Al final será un error tonto, como en todos los casos. No te preocupes. No se trata de ahorrar bytes; de hecho es mejor que sea más legible, y con más código, pero si tenemos que tener en la cabeza (o recordar más tarde) a qué hace referencia cada variable... el código es un poco más dificil de mantener. Es mejor escribirlo todo dentro del mismo for e ir construyendo los strings directamente en las condicionales en vez de almacenarlas en un array.


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 26/07/2007, 04:45
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: Funciona en Firefox, pero no en IE

Tienes razon, me confundi, le puse otro nombre (no id_general, que ya existia)

Mi propósito es validar 6 <select>

alguna opcion mejor??



Saludos
  #8 (permalink)  
Antiguo 26/07/2007, 05:30
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Funciona en Firefox, pero no en IE

Cita:
Iniciado por wigglyUtrera Ver Mensaje
Mi propósito es validar 6 <select>

alguna opcion mejor??
Sí, ya veo que tu propósito es validar 6 <select>, pero lo que me gustaría saber es un poco tu causa y consecuencia de cuando consideras error, que haces si es error, qué haces si no hay error.. esas cosas; tus criterios de validación y tus respuestas ante la validación fallida.

Otra propuesta equivalente podría ser esta:

Código PHP:
function tratarErrores(){
    
listas document.getElementsByTagName('select');
    var 
sinErrores true;
    for(var 
i=0i<listas.lengthi++){
        var 
indice listas[i].selectedIndex;
        var 
elId "label_Tipos"+i;
        if( 
listas[i].options[indice].text == "Elige...") {
            
document.getElementById(elId).style.color 'red';
            
sinErrores false;
        }
        else
            
document.getElementById(elId).style.color '';
    }
    return 
sinErrores;

Pero sin poder probarlo, no sé si funciona o no funciona.



Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #9 (permalink)  
Antiguo 26/07/2007, 07:46
 
Fecha de Ingreso: mayo-2005
Mensajes: 15
Antigüedad: 19 años
Puntos: 0
Re: Funciona en Firefox, pero no en IE

no he leido todo a conciencia pero algo comentaban por ahi arriba es que si tienes 6 select y vas desde 0 hasta 5.
for(var i=0; i<listas.length; i++){
seria for(var i=0; i<listas.length-1; i++){
a parte has revisado la consola de error del firefox para ver que dice antes de nada? porque suele indicar bastante bien por donde andan los tiros, cosa que no veras en el IE.
un saludo.
Pedro
  #10 (permalink)  
Antiguo 26/07/2007, 09:11
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Funciona en Firefox, pero no en IE

Cita:
Iniciado por plcabgut Ver Mensaje
no he leido todo a conciencia pero algo comentaban por ahi arriba es que si tienes 6 select y vas desde 0 hasta 5.
for(var i=0; i<listas.length; i++){
seria for(var i=0; i<listas.length-1; i++){
a parte has revisado la consola de error del firefox para ver que dice antes de nada? porque suele indicar bastante bien por donde andan los tiros, cosa que no veras en el IE.
un saludo.
Pedro
Si tienes 6 selects entonces listas.length=6, y si i=0 y se ejecuta mientras i<6, entonces recorre desde 0 hasta 5, es decir: listas[0], [1], [2], [3], [4] y [5].

Otra cosa es que si el error esta en IE únicamente, la consola de FF poco nos va a mostrar...

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #11 (permalink)  
Antiguo 26/07/2007, 11:12
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: Funciona en Firefox, pero no en IE

Gracias a todos por responder. He borrado el codigo y lo he hecho de nuevo de otra forma. Ya funciona perfectamente en los dos navegadores.


Saludos!
  #12 (permalink)  
Antiguo 26/07/2007, 15:25
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Funciona en Firefox, pero no en IE

No dejes de postear al final cómo te ha quedado la función, para que podamos todos los usuarios tomar nota de ello!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 03:56.