Foros del Web » Programando para Internet » Javascript »

setTimeout no me funciona en Firefox :(

Estas en el tema de setTimeout no me funciona en Firefox :( en el foro de Javascript en Foros del Web. Hola, bueno, primero que nada buenos días/tardes/noches a todos. Soy nuevo en esto de los foros (:)) así que voy a tratar de ser lo ...
  #1 (permalink)  
Antiguo 18/04/2008, 06:56
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
setTimeout no me funciona en Firefox :(

Hola, bueno, primero que nada buenos días/tardes/noches a todos. Soy nuevo en esto de los foros (:)) así que voy a tratar de ser lo más expresivo posible.

Tengo el siguiente problema:

Es un script muy simple que lo único que hace es mostrar un mensaje de error cuando se realiza una acción erronea en un formulario, la idea con este error es que pasado un determinado tiempo (2 o 3 segundos) el mensaje de error desaparezca solo.

El código es más o menos el siguiente

function error(mensaje) {
var error = document.getElementById('error');
error.style.display = "block";
error.innerHTML = mensaje;
setTimeout("error.style.display = 'none'",2000);
}


En internet Explorer (6 y 7) y Opera funciona bárbaro, pero en Firefox me da el siguiente error:

error is not definded
setTimeout("error.style.display = 'none'",2000);

El punto es que lo anterior lo hace correctamente, cambia el display a block e imprime el mensaje, pero el setTimeout no funciona...!
Si alguien sabe el motivo se lo agradecería

Saludos

Última edición por Miguelso23; 18/04/2008 a las 07:02
  #2 (permalink)  
Antiguo 18/04/2008, 07:19
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Re: setTimeout no me funciona en Firefox :(

Prueba a definir error como variable global en vez de local
  #3 (permalink)  
Antiguo 18/04/2008, 07:39
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Re: setTimeout no me funciona en Firefox :(

Gracias por la pronta respuesta, pero me sigue mandando el mismo error!
  #4 (permalink)  
Antiguo 18/04/2008, 07:43
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Re: setTimeout no me funciona en Firefox :(

Encontré el error!!! (valga la redundancia!).

Resulta que dentro del setTimeout no se puede hacer referencia a variables definidas fuera (Esto solamente en Firefox), entonces hay que declarar todo el "caminito" directamente dentro.

El código quedó así:

setTimeout("document.getElementById('error').style .display = 'none';",2000);

GRACIAS TUNAIT!!!
  #5 (permalink)  
Antiguo 18/04/2008, 07:53
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Re: setTimeout no me funciona en Firefox :(

Cita:
Iniciado por Miguelso23 Ver Mensaje
Resulta que dentro del setTimeout no se puede hacer referencia a variables definidas fuera (Esto solamente en Firefox)
Sí que se puede; lo que pasa es que si tienes definida la variable error como global (fuera de la función) y en la función le asignas la sentencia var delante a la variable te crea una nueva variable local dentro de la función. Es decir, tendrás dos variables error, una global y otra local y la función estará trabajando con la local

Fíjate en este ejemplo

Código:
var error
function error(mensaje) {

    var error = document.getElementById('error');
    error.style.display = "block";
    error.innerHTML = mensaje;
    setTimeout("error.style.display = 'none'",2000);

}
Pruébalo con y sin el var marcado en rojo. Sin el var marcado en rojo trabaja con la variable global y funciona ok. Con el var en rojo crea una local y salta el error que tenías antes.



Un saludo
__________________
Javascript Códigos - Bambú difunde
  #6 (permalink)  
Antiguo 18/04/2008, 08:00
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: setTimeout no me funciona en Firefox :(

Hola Miguelso23:

Lo que está ocurriendo es que la función error y la variable error se llaman de la misma manera. Recuerda que las funciones también son variables y no pueden llamarse de la misma manera.

Me dió error también en IE.

Código PHP:
function mostrarError(mensaje) {
    var 
error document.getElementById('error');
    
error.style.display "block";
    
error.innerHTML mensaje;
    
setTimeout("error.style.display = 'none'",2000);

Código HTML:
<button type="button" onclick="mostrarError('hola, qué tal')">El mensajito</button>
<div id="error"></div> 

Saludos.
__________________
- 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 18/04/2008, 08:07
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Re: setTimeout no me funciona en Firefox :(

Ya van varias veces que no me fijo en que coinciden el nombre de una variable con el de una función

Menos mal que San derkenuke anda siempre atento
  #8 (permalink)  
Antiguo 18/04/2008, 08:35
 
Fecha de Ingreso: abril-2008
Ubicación: en Montevideo
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Re: setTimeout no me funciona en Firefox :(

Ambos tienen razón!
Por un lado si le sacaba la declaración de variable local (var) seguí sin funcionarme, por otro lado, si cambiaba el nombre de la función de error a cualquier otro (mostrarError del ejemplo de derkenuke) tampoco me funcionaba, pero haciendo ambas cosas FUNCIONA OK OK!!!!

Muchas muchas gracias por todo!!!
  #9 (permalink)  
Antiguo 18/04/2008, 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: setTimeout no me funciona en Firefox :(

Cita:
Iniciado por tunait Ver Mensaje
Menos mal que San derkenuke anda siempre atento
Ui, me llamas hasta santo

Sí, la verdad es que en FF el ámbito de la variable error sólo llega hasta que se ejecuta la función, algo que podemos solucionar declarándola como global o así:
Código PHP:
function mostrarError(mensaje) {
    var 
error document.getElementById('error');
    
error.style.display "block";
    
error.innerHTML mensaje;
    
setTimeout(function() {
        
error.style.display 'none' 
    
},2000);

Ya lo siento, no lo había probado en FF.



Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #10 (permalink)  
Antiguo 29/07/2008, 11:30
 
Fecha de Ingreso: marzo-2008
Mensajes: 37
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: setTimeout no me funciona en Firefox :(

hola compañeros tengo una duda espero me puedan ayudar ya que no se me ocurre el porque no funciona tengo este script donde generar codigo es un botn que cuando ser presiona se genera el codigo automatico eso me funciona bien el problema esta cuando llamo a mi metodo setTimeout("habilita()",2000) ya que en un comienzo mis campos de texto estan desabilitados y cuando pulso en generar codigo se habilitan y se genera el codigo no me funciona no hace el setTimeout lo uso en firefox y no me funciona espero puedan ayudarme

<script type="text/javascript">

function generarCodigo(){

document.forms[0].method.value="generaCodigo";
document.forms[0].submit();
/*var cod;
alert(document.getElementById("codCabecera").value );
if(document.getElementById("codCabecera").value!=" "){
cod=parseInt(document.getElementById("codCabecera" ).value);
cod+=parseInt(1);
}else{
cod=1;
}
document.getElementById("codCabecera").value=cod;
alert(cod);
*/


setTimeout("habilita()",2000)
}



function habilita(){
document.getElementById("hotel").disabled='';
document.getElementById("categoria").disabled='';

}
function deshabilita(){
document.getElementById("hotel").disabled='disable d';
document.getElementById("categoria").disabled='dis abled';
}



</script>
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 22:54.