Foros del Web » Programando para Internet » Javascript »

Pequeña duda - alert

Estas en el tema de Pequeña duda - alert en el foro de Javascript en Foros del Web. Wenas Hm..., tengo el siguiente codigo y me gustaría saber el por qué de una cosa. Cita: function alert() { msg_alert = document.getElementById(" left_div ").offsetHeight; ...
  #1 (permalink)  
Antiguo 07/09/2009, 04:03
 
Fecha de Ingreso: enero-2009
Mensajes: 81
Antigüedad: 15 años, 4 meses
Puntos: 1
Pregunta Pequeña duda - alert

Wenas

Hm..., tengo el siguiente codigo y me gustaría saber el por qué de una cosa.

Cita:
function alert() {

msg_alert = document.getElementById("left_div").offsetHeight;

}

alert(msg_alert)
Bueno, pues la altura del div llamado "left_div" no aparecerá en pantalla porque el comando alert está fuera de la function, porque si lo meto dentro de esta manera...
Cita:
function alert() {

msg_alert = document.getElementById("left_div").offsetHeight;
alert(msg_alert)
}
...si funciona.

Me gustaría saber por qué?
Lo que si he leeido en otras webs, es que si creas una variable dentro de una función esa variable sólo sirve para esa funcion, y cuando acabe la funcion, todo desaparece. Estamos ante eso?

Y otra cosa, si ahora la linea msg_alert la llevas fuera de la function junto al comando alert de la siguiente manera:

Cita:
function alert() {}

msg_alert = document.getElementById("left_div").offsetHeight;
alert(msg_alert)
Por qué tampoco va el mensage del alert?

Grazie in anticipo!
  #2 (permalink)  
Antiguo 07/09/2009, 04:42
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 2 meses
Puntos: 62
Respuesta: Pequeña duda - alert

alert es una funcion de javascript, no la renombres :) de todas formas las variables que se declaran dentro de las funciones son privadas, si se declaran fuera son globales.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 07/09/2009, 04:50
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Pequeña duda - alert

Primero que nada, ya hay una funcion alert en javascript. Te reocmiendo que andes por ahí reescribiendo funciones que ya han sido predefinidas por el lenguaje.

Ahora, con tu pregunta, estás llamando una función que hace uso de una variable que ha sido definida dentro de si misma. Para el momento que llamas la función la variable todabía no existe, por eso es que no te da nada.

En tu segundo ejemplo estás llamando a la función, la primera vez te debe dar un error o algo parecido, después dentro de la función la llamas a sí misma, pero esto seguro que te deve crear un loop infinito, así que imagino que estás obteneidno un error sobre ese respecto.

En el tercer ejemplo, estás llamando a una función que no hace nada. No tiene instrucciones. Eso sin contar que en ninguna de tus funciones estás especificando que estás esperando un parametro y ninguna de las funciones hace algo más que si acaso asignar un valor a una variable. También sin contar que lo más probalbe es que estés llamando a las funciones antes de que el documento haya sido cargado por lo que imagino que te debe dar un error soobre que el elemento no existe o es nulo.

Resumiento, te recomiendo que leas como declarar funciones por que en ninguno de tus tres intentos lo estás haciendo bien. Yo escrbí un articulo, aun que no se si no sea un tanto avanzado para tu nivel, de cualquier modo te lo recomiendo:

http://imbuzu.wordpress.com/2009/06/...es-javascript/

Y recuerda lo que te digo sobre andar por ahí sobreescribiendo las funciones que ya han sido establecidas por el lenguaje. No es una buena práctica.
__________________
twitter: @imbuzu
  #4 (permalink)  
Antiguo 07/09/2009, 06:25
 
Fecha de Ingreso: enero-2009
Mensajes: 81
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Pequeña duda - alert

Que cosas...

Algunas veces las personas escribien unas coas que no son lo que querian transimitir. Creo que me ha pasado a mi eso.

Lo siento, en mi codigo original, no lo tengo tal y como os lo he presentado en el foro y al cambiar el código para adaptarlo al foro, han surgido malentendidos.

Cuando puse "function alert()", quería poner una función que contendría una variable y después con el comando alert mostrar dicha variable. Algo asi:

1º caso:
Cita:
function mensaje_de_alerta() {

msg_alert = document.getElementById("left_div").offsetHeight;

}

alert(msg_alert)
Siento haber puesto "function alert() {}" Porque eso ha causado problemas (sólo ha sido al escribir el mensaje en el foro)

Entonces, de nuevo formula la pregunta. Por qué no va? :P

P.D: En esta ocasion, porque la variable pertenece a la función y cuando llega la linea de alert(msg_alert) ya no existe la función?
Como se podría hacer?

Muchas gracias de nuevo
  #5 (permalink)  
Antiguo 07/09/2009, 07:06
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 2 meses
Puntos: 62
Respuesta: Pequeña duda - alert

Me remito a este último mensaje, como ya te he dicho antes las variables que se declaran dentro de funciones son privadas de dicha función. De todas formas podrías devolver el valor en la función y tal que así:
Código javascript:
Ver original
  1. function mensaje_de_alerta() {
  2.  
  3. return document.getElementById("left_div").offsetHeight;
  4.  
  5. }
  6.  
  7. alert(mensaje_de_alerta());

Se podría mejorar pasandole como parametro el ID del elemento:

Código javascript:
Ver original
  1. function mensaje_de_alerta(elemento) {
  2.  
  3. return document.getElementById(elemento).offsetHeight;
  4.  
  5. }
  6.  
  7. alert(mensaje_de_alerta('left_div'));
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #6 (permalink)  
Antiguo 07/09/2009, 11:23
 
Fecha de Ingreso: enero-2009
Mensajes: 81
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Pequeña duda - alert

ZiTAL, antes me dijiste:

Cita:
las variables que se declaran dentro de las funciones son privadas, si se declaran fuera son globales
Si estableces una variable global (segun lo que has dicho), después, esa variable no la puedes utilizar dentro de una futura "function" que crees, no? He hecho la prueba y no la reconoce.
Ok, vale.
Es que, en realidad, todo gira entorno a lo siguiente:

Código:
var distantzia_altuera = document.getElementById('cellgeriza').offsetHeight;

function getting_img(jatorria, zabalera, altuera, alternatiba, posizioa, top) {

	this.element = document.createElement('img');
	this.element.src = jatorria;
	this.element.width = 10;
	this.element.height = altuera;
	this.element.alt = '';
	this.element.style.position = 'relative';
	this.element.style.top = top;
	
}

var img = new getting_img('../imag/shadowimg.png', '', distantzia_altuera, '', '', 1);
document.getElementById('cellgeriza').appendChild(img.element);
No tengo ni idea por qué no me funciona! A ver si me podeis echar un cable. Todo lo que os contaba al final tenía lugar en este codigo que te acabo de enseñar.

Gracias de nuevo
  #7 (permalink)  
Antiguo 07/09/2009, 13:50
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Pequeña duda - alert

Cita:
las variables que se declaran dentro de funciones son privadas de dicha función
De hecho es un poquito más complicado. Si las declaras con var:

var miVariable

si son privadas, de otro modo no.

Cita:
Si estableces una variable global (segun lo que has dicho), después, esa variable no la puedes utilizar dentro de una futura "function" que crees, no?
Si se puede, prueva por ejemplo con esto:

Código javascript:
Ver original
  1. var variable = 'soy una variable';
  2.  
  3. function muestraVariable(){
  4.       alert(variable);
  5. }
  6.  
  7. window.onload = muestraVariable;

Verás que al cargar la página te muestra un alert con el valor de la variable. Esa variabl e es global y está siendo accedida desde la función.

Cita:
No tengo ni idea por qué no me funciona! A ver si me podeis echar un cable. Todo lo que os contaba al final tenía lugar en este codigo que te acabo de enseñar.
Como te dige con mi respuesta, la que según tu no es lo que yo quería transmitir, tu problema es que estás llamando esas funciones antes de que se cargue el documento y por lo tanto los elementos a los que quieres acceder no existen. Prueva poniendo todo eso en una función anónima que se llame al cargar la página y verás que obtienes un resultado diferente:

Código javascript:
Ver original
  1. window.onload = function(){
  2. var distantzia_altuera = document.getElementById('cellgeriza').offsetHeight;
  3.  
  4. function getting_img(jatorria, zabalera, altuera, alternatiba, posizioa, top) {
  5.  
  6.     this.element = document.createElement('img');
  7.     this.element.src = jatorria;
  8.     this.element.width = 10;
  9.     this.element.height = altuera;
  10.     this.element.alt = '';
  11.     this.element.style.position = 'relative';
  12.     this.element.style.top = top;
  13.    
  14. }
  15.  
  16. var img = new getting_img('../imag/shadowimg.png', '', distantzia_altuera, '', '', 1);
  17. document.getElementById('cellgeriza').appendChild(img.element);
  18. }

Eso debería funcionar, a menos que haya más cosas que no nos estés diciendo.
__________________
twitter: @imbuzu
  #8 (permalink)  
Antiguo 07/09/2009, 14:59
 
Fecha de Ingreso: enero-2009
Mensajes: 81
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Pequeña duda - alert

Woow!

SOLUCIONADO

Gracias de nuevo a todos. Seguiré trabajando. Resulta que estaba dandole vueltas todo el rato al código y se ve como bien decias tu buzu que sólo estaba ejecutando esa funcion y no lo demás.

De todas maneras gracias a todos por el cable, poco a poco hemos ido dando con ello


P.D: buzu el que no transmitia lo que queria decir era YO, no tu!

Nos vemos pues hasta el prox. problema!
  #9 (permalink)  
Antiguo 07/09/2009, 15:27
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Pequeña duda - alert

Cita:
P.D: buzu el que no transmitia lo que queria decir era YO, no tu!
jajaja... y yo acá quemándome los pelos por la respuesta jajaja.... Todo aclarao'

Saludos!
__________________
twitter: @imbuzu
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 17:12.