Foros del Web » Programando para Internet » Javascript »

No se me ejecuta una funcion JS dentro del body html ¿por que?

Estas en el tema de No se me ejecuta una funcion JS dentro del body html ¿por que? en el foro de Javascript en Foros del Web. Hola! Creo que el titulo resume muy bien el problema, creo que es mas practico que os ponga el codigo para que entendais mi pregunta ...
  #1 (permalink)  
Antiguo 01/04/2012, 02:16
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Pregunta No se me ejecuta una funcion JS dentro del body html ¿por que?

Hola!

Creo que el titulo resume muy bien el problema, creo que es mas practico que os ponga el codigo para que entendais mi pregunta :

Código:
<head>
<style type="text/css">

#menu{	
width:200px;
height:200px;
background:#00FF00;
}


</style>
<script  language="javascript" > 
function NombreEscuderiaGet(array){
	return N;
}

function NombreEscuderiaSet(){
	var n = NombreEscuderiaGet(array);
	switch (n) { 
   		case 1: 
      	 document.writeln("Texto de prueva");
      	 break
	}
}
</script>
</head>

<body>
	<div id="menu" onload="NombreEscuderiaGet('1')"><script language="javascript">NombreEscuderiaSet()</script></div>
    </div>

</div>


</div>
</body>
</html>
¿por que no se ejecuta correctamente la función que llamo en el body?
  #2 (permalink)  
Antiguo 01/04/2012, 07:12
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

¡buenas!
no todos los elementos son capaces de iniciar el evento onload. de momento conozco solo dos elementos que inician onload: body e img.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 01/04/2012, 07:37
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Pregunta Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

De igual menera he probado con otros eventos que SI estoy seguro de que sirven en un elemento div , por ejemplo en un onmouseover.

La cuestion es que no se ejecuta la funcion y el texto no aparece!

¿he cometido algún error de sintaxis? el debugger me dice que no
  #4 (permalink)  
Antiguo 01/04/2012, 07:56
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

yo veo errores logísticos. en NombreEscuderiaGet, ¿dónde está definido la variable N? en NombreEscuderiaSet, ¿dónde está definido la variable array?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 01/04/2012, 09:05
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Pregunta Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

Tienes razón, pero tampoco va, también he probado con un default y no aparece el texto :

Código:
<script  language="javascript" > 
function NombreEscuderiaGet(array){
	var N = array;
	return N;
}

function NombreEscuderiaSet(){
	var n = NombreEscuderiaGet(array);
	switch (n) { 
   		case 1: 
      	 document.writeln("Texto de prueva");
      	 break
		
		default:
		 document.writeln("Texto de prueva default");
	}
}
</script>
¿Que estoy haciendo mal?

Aparte una pregunta sonbre tu respuesta :

Cita:
NombreEscuderiaSet, ¿dónde está definido la variable array?
¿No se supone que si en NombreEscuderiaSet llamo a una funcion la cual ya esta proptotipada (como en C++, por ejemplo) ya coje todas las variables de esta de la pila?
  #6 (permalink)  
Antiguo 01/04/2012, 09:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

no comprendo bien la pregunta pero creo que la respuesta es no. no tengo idea de como maneja C++ las variables entre funciones. en javascript, la visibilidad o alcance (scope) de las variables esta dado primero por la declaración de la variable (global o local) y segundo por el scope donde se declara la función. fíjate que ambas funciones están declaradas en el mismo scope (global) y que la variable array es local a NombreEscuderiaGet. lo que significa, que fuera del cuerpo de NombreEscuderiaGet, la variable no es visible. como ves, la posibilidad de agarrar las variables no es cuando se invoca, sino cuando se define la función. en esta línea var n = NombreEscuderiaGet(array);, javascript busca si la variable array está definida en el scope de NombreEscuderiaSet, si no lo encuentra continua buscando ascendiendo por la pila hasta agotarlo. si no se encontro, entonces genera error porque en ningún lugar está definido. diferente hubiera sido si definieras la función NombreEscuderiaSet dentro de NombreEscuderiaGet, pero entonces la primera función no es visible en el exterior, sino que es local (como una variable) a la función NombreEscuderiaGet.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 01/04/2012, 09:51
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Pregunta Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

Comprendo, ¿no puedo pasar por referencia la variable? o ¿tengo que declarar una varible fuera de ambas funciones para que sea global? Lo que me interesa es asignar el valor de retorno de NombreEscuderiaGet a una variable dentro de NombreEscuderiaSet, para que Swich pueda funcionar correctamente.


¿Es totalmente inviable que dentro de NombreEscuderiaSet, la variable n tome el valor de retorno de NombreEscuderiaGet? :

Código:
function NombreEscuderiaSet(){
	var n = NombreEscuderiaGet(array);
	switch (n) { 
   		case 1: 
      	 document.writeln("Texto de prueva");
      	 break
		
		default:
		 document.writeln("Texto de prueva default");
	}
}
  #8 (permalink)  
Antiguo 01/04/2012, 09:56
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

no es que sea inviable, sino que simplemente la variable array no está definida en el contexto de NombreEscuderiaSet. si por ejemplo pasaras un valor literal (1, "string", true, o lo que fuera), entonces n recibe el valor que devuelva la función. si miras la consola del navegador, claramente debe indicarte que array no está definido.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 01/04/2012, 10:12
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

Okey, ¿y que hago para que en el body , cuando el evento se ejecuta y llama a la funcion NombreEscuderiaGet(array) , este array tambien estea disponible en NombreEscuderiaSet?

Quizas si la declaro fuera ... :

Código:
function NombreEscuderiaGet(P){
	var N = P;
	return N;
}

var P = NombreEscuderiaGet(array);

function NombreEscuderiaSet(P){
	var n = P;
	switch (n) { 
   		case 1: 
      	 document.writeln("Texto de prueva");
      	 break
		
		default:
		 document.writeln("Texto de prueva default");
	}
}
  #10 (permalink)  
Antiguo 01/04/2012, 10:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

asumiendo que el handler del evento es NombreEscuderiaGet("1") (como en tu código inicial), entonces dicha función tiene que crear una variable global para que otras funciones que no estén en el mismo contexto puedan acceder a ella. ahora bien, tienes que asegurarte de primero invocar NombreEscuderiaGet antes que cualquier otra función que utilice la variable creada.

tu código actual aún presenta el mismo problema que el anterior. especificamente en esta línea, var P = NombreEscuderiaGet(array);. lo que aún no logro comprender es qué debería representar la variable array. diferente hubiera sido si tuvieras algo como esto.

Código:
function NombreEscuderiaGet(P){
	var N = P;
	return N;
}

function NombreEscuderiaSet(P){
	var n = P;
	switch (n) { 
   		case 1: 
      	 document.writeln("Texto de prueva");
      	 break
		
		default:
		 document.writeln("Texto de prueva default");
	}
}

var array = 1;
var P = NombreEscuderiaGet(array); // array ahora esta definido;
NombreEscuderiaSet(P); // invocamos la función pasando como argumento la variable P definida anteriormente;
fíjate en el comentario de cuando se invoca NombreEscuderiaSet. la variable P dentro de NombreEscuderiaSet es distinta a la variable P definida en el ámbito global. esto porque cuando declaraste la función NombreEscuderiaSet indicaste que lleva un argumento por nombre P, y automáticamente los nombre de los argumentos de una función pasan a ser variable locales de dicha función. si al invocar NombreEscuderiaSet no pasaras la variable global P, entonces el argumento de la función recibe como valor undefined. y de nuevo, en este caso P en NombreEscuderiaSet no haría referencia a la global aunque no se le haya pasado un parámetro al invocarse.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 01/04/2012, 10:50
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Pregunta Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

Okey, me mirado atentamente tu codigo, pero dadas mis encesidades creo que seria un error tener una variable global y he optado por crear una clase e instanciarla.

¿Pero adivinas? no me funciona! xD

Código:
<script language="javascript">

var NombreEscuderia = function (n){
	this.n = new Number(n);
	this.Escuderia = selec;
	function selec(this.n){
	switch (this.n) { 
   		case 1: 
      	 document.writeln("Texto de prueva");
      	 break
		
		default:
		 document.writeln("Texto de prueva default");
	}
	}
}

var Default = new NombreEscuderia('0'); // aqui la instancio directamente
</script>
</head>

<body>
	<div id="menu" ><script language="javascript">default.selec()</script></div></div></div>
  #12 (permalink)  
Antiguo 01/04/2012, 11:24
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

no te funciona porque default es distinto de Default. javascript es sensible a mayúsculas/minúsculas. además, default es una palabra reservada y no la puedes usar como variable o como identificador de funciones. por otro lado, el método selec no existe. la función existe pero solo dentro del constructor (clase). es decir, dentro del constructor puedes usar el nombre selec para referirte a la función, pero no puedes usarla como método de una instancia porque la función no se ha enlazado bajo el mismo nombre. en lugar de selec debes usar Escuderia. o sea, Default.Escuderia. otro error lo tienes en la defición de selec. especificamente la declaración del argumento es inválida. los nombres de argumentos deben seguir la misma norma que para las variables y funciones. en todo caso, en tu ejemplo no necesitas pasarle ningún argumento.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 01/04/2012 a las 11:48
  #13 (permalink)  
Antiguo 01/04/2012, 12:45
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Pregunta Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

muchas gracias!, con todo lo que he has corregido en este tema he aprendido un monton!


Haciendo las correciones pertinentes :

Código:
<script language="javascript">

var NombreEscuderia = function (n){
	this.n = new Number(n);
	this.Escuderia = selec;
	function selec(){
	switch (this.n) { 
   		case 1: 
      	 document.writeln("Texto de prueva");
      	 break
		
		default:
		 document.writeln("Texto de prueva default");
	}
	}
}

var NombreDefecto = new NombreEscuderia(1);

</script>

</head>

<body>
	<div id="menu" ><script language="javascript">NombreDefecto.Escuderia()</script></div>
    </div>

</div>
Ya tengo la salida de texto, pero solo el valor defaut, no he conseguido hacer que el case 1: me salga ¿algo mas que deba saber?
  #14 (permalink)  
Antiguo 01/04/2012, 12:48
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

Okey solucionado , a swich tengo que pasarle la variable como: swich(n) y no referenciada como tenia swich(this.n) , ¿aunque no entiendo por que, alguien podría explicármelo?
  #15 (permalink)  
Antiguo 01/04/2012, 12:53
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

si, en esta línea this.n = new Number(n); estás creando un objeto Number, pero en switch(this.n) no parea con ninguno de los cases. pues el literal 1 en case 1 es distinto al objeto this.n. uno es un literal y el otro es un objeto. puedes prescindir de new Number y solo dejar la asignación directa del parámetro n a la propiedad this.n.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 01/04/2012 a las 14:03 Razón: error técnico
  #16 (permalink)  
Antiguo 01/04/2012, 13:51
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Respuesta: No se me ejecuta una funcion JS dentro del body html ¿por que?

Sos groso, sabelo!

Etiquetas: body, cuerpo
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:07.