Foros del Web » Programando para Internet » Javascript »

problema con una variable global

Estas en el tema de problema con una variable global en el foro de Javascript en Foros del Web. Esta funcion esta dentro de un archivo de javascript. La variable acceso esta creada fuera de la funcion y lo que yo quiero es que ...
  #1 (permalink)  
Antiguo 21/08/2005, 13:29
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
problema con una variable global

Esta funcion esta dentro de un archivo de javascript. La variable acceso esta creada fuera de la funcion y lo que yo quiero es que cuando termine la funcion guarde su valor. No se en que me equivoco, pero al terminar la funcion la variable no cambia su valor anterior.

function comprobarUsuario () {
var name, key, i, acierto;
acierto = false;
acceso = 0;
name = document.getElementById('nombre').value;
key = document.getElementById('clave').value;
while(acceso < nombres.length && acierto == false) {
if(name == nombres[acceso] && key == claves[acceso]) {
window.location='principal.xul';
acierto = true;
}
else
acceso++;
}
if(acierto == false)
window.location='fallo.xul';
}
  #2 (permalink)  
Antiguo 21/08/2005, 18:22
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
Deberas poner fuera de la funcion

var acceso;
__________________
- 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 22/08/2005, 02:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
Eso ya lo tengo hecho, por eso no se donde esta el fallo
  #4 (permalink)  
Antiguo 22/08/2005, 02:42
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
Lo primero de todo, de todas tus variables:

var name, key, i, acierto;

Cual es la que no se te graba y que error da?
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #5 (permalink)  
Antiguo 22/08/2005, 02:56
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
NO es ninguna de esas. Es que tengo fuera de la funcion:
var acceso;
Pero cuando llamo a la funcion su valor no cambia. La variable acceso, aunque es global, no modifica su valor fuera de la funcion. ¿Por que la toma como una variable local? Ese es el problema
  #6 (permalink)  
Antiguo 22/08/2005, 03:08
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
He probado el ejemplo tal que así y me funciona, ponle de todas formas un return acceso;

Código HTML:
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
var acceso;

function comprobarUsuario () {
var name, key, i, acierto;
acierto = false;
acceso = 0;
nombres = 10;
while(acceso < nombres ) 
{
	acceso++;
	alert(acceso);
	
}
return acceso;
}
</script>

</head>

<body>
<script>
comprobarUsuario();
alert(acceso);
</script>
</body>

</html> 
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #7 (permalink)  
Antiguo 22/08/2005, 03:15
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
Pues sigue sin funcionar. De todas formas, mi archivo es xul y no html. A lo mejor esta ahi el fallo
  #8 (permalink)  
Antiguo 23/08/2005, 03:21
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
¿Nadie sabe la respuesta?
  #9 (permalink)  
Antiguo 23/08/2005, 06:51
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
A mi el script de crcbad también me funciona.

¿En que navegador trabajas? Es raro... prueba ese mismo ejemplo a ver. No me lo explico.
__________________
- 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 23/08/2005, 09:21
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
Utilizo el firefox porque la pagina que utiliza esa funcion es xul y el IE no las ve.
  #11 (permalink)  
Antiguo 23/08/2005, 09:30
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Las variables globales "cuelgan" de window, así que una forma de referenciar a la variable global es anteponiéndole el objeto padre de cualquiera de estas dos maneras:

window.acceso
... ó...
window["acceso"]

La segunda forma me gusta mucho más porque dentro de los corchetes se pueden usar variables (de la primera manera también pero dependiendo del odioso eval)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #12 (permalink)  
Antiguo 23/08/2005, 09:37
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
¿Y eso como lo podria utilizar? ¿poniendo window.acceso en todas partes menos en la declaracion primera? Si es asi, lo he probado y tampoco va.
  #13 (permalink)  
Antiguo 23/08/2005, 10:01
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
Quizas estés modificando la variable acceso desde otro lado o...

No se, tiene pinta de ser el tipico fallo tonto. ¿Es todo el codigo el que nos has posteado? Quizas deberias poner el documento completo a ver qué pasa...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #14 (permalink)  
Antiguo 23/08/2005, 10:12
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
Aqui esta todo el archivo. La variable la utilizo en la funcion que he puesto y en algunas como enero y septiembre del final del archivo. La variable seleccionado tiene el mismo fallo pero no la puse porque si resuelvo el problema de una supongo que la otra se resolvera igual.


var nombres, claves, correos, nPedidos, imagenes, descripcion, transporte;
nombres = ['Antonio','Raul'];
claves = ['prueba','rodeo'];
correos = ['[email protected]','[email protected]'];
nPedidos = ['9543167852','7984621358'];

imagenes = ['imagenes/camara.jpg', 'imagenes/cuadro.jpg', 'imagenes/jarron.jpg',

'imagenes/ordenador.jpg', 'imagenes/televisor.jpg', 'imagenes/dormitorio.jpg',

'imagenes/videojuego.jpg'];

descripcion = ['Camara digital de pequeño tamaño con un potente zoom', 'Hermoso cuadro pintado

por Jose Gonzalez', 'Gran jarron aleman del siglo XVI', 'Potente ordenador HP con procesador

Pentium IV', 'Televisor de plasma de 30 pulgadas', 'Dormitorio', 'Videojuego Fifa 2005'];

transporte = ['La empresa transportista es Seur. Para conocer el estado de su pedido puede

llamar al telefono 598764356 y preguntar por el pedido numero 4789561', 'La empresa

transportista es Fedex. Para conocer el estado de su pedido puede llamar al telefono 598764356

y preguntar por el pedido numero 4983566', 'La empresa transportista es MRW. Para conocer el

estado de su pedido puede visitar su web (www.mrw.com) y mirar el pedido numero 9789356', 'La

empresa transportista es MRW. Para conocer el estado de su pedido puede visitar su web

(www.mrw.com) y mirar el pedido numero 9651273', 'La empresa transportista es Fedex. Para

conocer el estado de su pedido puede llamar al telefono 598764356 y preguntar por el pedido

numero 4789561', 'La empresa transportista es Bpack. Para conocer el estado de su pedido puede

llamar al telefono 598764356 y preguntar por el pedido numero 4789561', 'La empresa

transportista es Fedex. Para conocer el estado de su pedido puede llamar al telefono 598764356

y preguntar por el pedido numero 4789561'];

var seleccionado;
var acceso;


function comprobarUsuario () {
var name, key, acierto;
acierto = false;
acceso = 0;
name = document.getElementById('nombre').value;
key = document.getElementById('clave').value;
while(acceso < nombres.length && acierto == false) {
if(name == nombres[acceso] && key == claves[acceso]) {
window.location='principal.xul';
acierto = true;
alert(acceso);
}
else
acceso++;
}
if(acierto == false)
window.location='fallo.xul';
}

function comprobarNP () {
var email, nPedido, i, acierto;
acierto = false;
i = 0;
nPedido = document.getElementById('NP').value;
email = document.getElementById('email').value;
while(i < correos.length && acierto == false) {
if(email == correos[i] && nPedido == nPedidos[i]) {
usuario=i;
window.location='principal.xul';
acierto = true;
}
else
i++;
}
if(acierto == false)
window.location='fallo.xul';
}

function recordarClave () {
window.location='recordar.xul';
}

function cancelar () {
window.location="cancelar.xul";
}

function pedido () {
window.location="caracteristicas.xul";
}

function cambiarDatos () {
window.location="cancelar.xul";
}

function recordar () {
window.location="caracteristicas.xul";
}

function cargar() {
var vimg, vrep, vdescrip;
vimg = document.getElementById("img");
vrep = document.getElementById('rep');
vdescrip = document.getElementById('descrip');
vimg.setAttribute("src",imagenes[seleccionado]);
vrep.setAttribute('value',transporte[seleccionado]);
vdescrip.setAttribute('value',descripcion[seleccionado]);
}
function enero () {
if (acceso == 0)
window.location="enero-0.xul";
else if (acceso == 1)
window.location="enero-1.xul";
}
function febrero () {
window.location="febrero.xul";
}
function marzo () {
if (acceso == 0)
window.location="marzo-0.xul";
else
window.location="marzo.xul";
}
function abril () {
window.location="abril.xul";
}
function mayo () {
if (acceso == 1)
window.location="mayo-1.xul";
else
window.location="mayo.xul";
}
function junio () {
window.location="junio.xul";
}
function julio () {
window.location="julio.xul";
}
function agosto () {
window.location="agosto.xul";
}
function septiembre () {
if (acceso == 0)
window.location="septiembre-0.xul";
else if (acceso == 1)
window.location="septiembre-1.xul";
}
function octubre () {
window.location="octubre.xul";
}
function noviembre () {
window.location="noviembre.xul";
}
function diciembre () {
window.location="diciembre.xul";
}

function a1 () {
seleccionado=0;
window.parent.frames[1].location="a1.xul";
}
function a2 () {
seleccionado=3;
window.parent.frames[1].location="a2.xul";
}
function a3 () {
seleccionado=6;
window.parent.frames[1].location="a3.xul";
}
function r1 () {
seleccionado=1;
window.parent.frames[1].location="r1.xul";
}
function r2 () {
seleccionado=2;
window.parent.frames[1].location="r2.xul";
}
function r3 () {
seleccionado=4;
window.parent.frames[1].location="r3.xul";
}
function r4 () {
seleccionado=5;
window.parent.frames[1].location="r4.xul";
}
  #15 (permalink)  
Antiguo 23/08/2005, 12:36
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
¿Nadie puede ayudarme?
  #16 (permalink)  
Antiguo 23/08/2005, 12:39
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
No se puede probar el codigo sin el HTML correspondiente. De todas maneras... ¿seguro que accedes a la variable desde el mismo frame, y no desde otro?

no se que decirte, se me acaban las opciones.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #17 (permalink)  
Antiguo 23/08/2005, 12:44
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
Accedo a la fncion desde un frame pero la ariable no esta definida en ninguna sino en la pagina en general, creo.
Lo que hago es una pagina donde el usuario se identifica. Ahi guardo el valor de la variable para saber que usuario esta conectado. Entonces lo envio a otra pagina donde una calendario en un frame mira quien es el usuario para llevarle a un mes o a otro. ¿Tendria que poner algo por llamarla desde un frame?
  #18 (permalink)  
Antiguo 23/08/2005, 13:17
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
si, para obtener el valor de una variable que esta en otro frame creo que es como con los popups. Accedes al nivel superior con top y luego navegas por los frames (o con parent, como lo has hecho con las funciones)

parent.frames[x].acceso

Mira a ver si te funciona asi
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #19 (permalink)  
Antiguo 24/08/2005, 02:04
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
Creo que ese no es el problema. He hecho que desde la primera pagina donde toma valor vaya a otra sin ningun frame en vez de ir a la pagina con los 2 frames y tampoco mantiene el valor.¿Influye en algo que cambio de pagina?
  #20 (permalink)  
Antiguo 24/08/2005, 03:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
He conseguido solucionar algo el problema. Utilizando una variable contador si me funciona haciendo la prueba sin frames. ¿Como puedo acceder desde un frame si la variable no pertenece a ninguno sino que la he definido fuera?

function comprobarUsuario () {
var name, key, acierto, contador;
acierto = false;
acceso = 0;
contador = 0;
name = document.getElementById('nombre').value;
key = document.getElementById('clave').value;
while(acceso < nombres.length && acierto == false) {
if(name == nombres[acceso] && key == claves[acceso]) {
window.location='principal.xul';
acierto = true;
alert(acceso);
}
else
acceso++;
contador++;
}
acceso = contador;
if(acierto == false)
window.location='fallo.xul';
}
  #21 (permalink)  
Antiguo 24/08/2005, 04:07
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
He probado con parent.acceso pero no funciona. Ahora el fallo solo esta en los frames porque si accedo desde una pagina sin frames si funciona. ¿Como puedo acceder desde el frame?
  #22 (permalink)  
Antiguo 25/08/2005, 07:19
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
Si pones ese codigo con var name, key, acierto, contador; todas esas variables seran locales a la funcion, ninguna sera global de toda la pagina.

Cita:
¿Influye en algo que cambio de pagina?
Que quieres decir, cargar otra pagina? si cargas otra pagina en el mismo frame (ventana, sustituyendo el documento) claro que vas a perder el valor de la variable. Solo dura para la ejecucion de una pagina, en cuanto se cierra o se cambia de pagina, se pierde.

Cita:
¿Como puedo acceder desde un frame si la variable no pertenece a ninguno sino que la he definido fuera?
fuera? quieres decir en el html principal que define todos los frames con su tamaño? Pues no lo se... quizas con un top.acceso? Habria que probarlo, nunca lo he hecho.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #23 (permalink)  
Antiguo 25/08/2005, 12:47
 
Fecha de Ingreso: febrero-2004
Mensajes: 77
Antigüedad: 20 años, 2 meses
Puntos: 0
Si hago un alert(acceso) si me mantiene el valor en la nueva ventana. ¿Alguien sabe por que? Es que tengo que hacer algo parecido con otra variable y no me funciona.
  #24 (permalink)  
Antiguo 26/08/2005, 07:22
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
Pues la verdad es que no lo sé.
siento no poder ayudarte.
__________________
- 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 08:46.