Ver Mensaje Individual
  #17 (permalink)  
Antiguo 13/06/2008, 17:20
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Respuesta: Darle valor a variables globales desde una función

Bueno, lo que tenemos aquí es un popurrí de funciones, frames y ámbitos de variable. Aunque está claro que el problema son los frames, que es por donde tendríamos que haber empezado.

Lo que está ocurriendo es que miras a ver qué valor tienen las variables hora, minuto y segundo en un frame donde no están definidas, por eso te da undefined.

Las variables esas ya están definidas dentro de tu frame (dentro de archivo.js están declaradas), pero en tu frame no has llamado a iniciar_hora(), luego no tienen valor.

De todas maneras en firefox no me ha funcionado para nada como se espera, no creo que se puedan escribir etiquetas como <html> y <script> en un frame...


Creo que lo más óptimo sería llamar a funciones entre frames: Puedes llamar a una función en la página padre con parent.tuFuncion(), así no necesitarías tags fuera de body.

Mi consejo es que te libres de los frames cuanto antes... pero prueba este ejemplo:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
title>Página nueva</title>
</
head>

<
body>

<
iframe name="central"></iframe>

<
script type="text/javascript">
<!--

var 
hora;
var 
minuto;
var 
segundo ;

function 
iniciar_hora() {
    
alert("inicio hora!");
    
//extraemos del objeto la hora, minuto y segundo actuales
    
var fecha = new Date();
    
hora fecha.getHours();
    
minuto fecha.getMinutes();
    
segundo fecha.getSeconds();
    return 
true;
}

function 
mostrar_hora() {
    
alert("hora_global = "+hora+"\r\nminuto_global = "+minuto+"\r\nsegundo_global = "+segundo); 
}


function 
comenzar() {
    var 
C;
    
C='Incio de la experiencia.';
    
C+='<a href="#" onclick="alert(\'click\'); parent.comenzar2(); return false;"> COMENZAR</a> ';
    
parent.central.document.write(C); //Muestro el contenido de C por pantalla, en el frame C que es mi frame principal
    
return true;
}

function 
comenzar2() {
    
alert("comenzar2!");
    var 
C;
    
C='<a href="#" onclick="parent.iniciar_hora(); return false;">iniciar hora </a><br/>';
    
C+='<a href="#" onclick="parent.mostrar_hora(); return false;">mostrar hora</a>';
    
parent.central.document.write(C); 
    
parent.iniciar_hora();    // iniciamos
    
parent.mostrar_hora();  // miramos
    
return true;
}


comenzar();

// -->
</script>


</body>
</html> 

Todo en un mismo documento funciona muy bien (además lo he hecho pensando también en firefox). Así no tienes que preocuparte de ámbitos, todo estará en parent, ya ya está.



Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.