problema con javascript

Iniciado por grimeyjavi, 26 Marzo 2015, 15:37 PM

0 Miembros y 1 Visitante están viendo este tema.

grimeyjavi

Bueno, el problema es que no se por que, la funcion no manda el mensaje a la variable resultado... os dejo el codigo en pastebin, estoy mareado, y no se si hago bien en preguntarlo aqui...

Código (javascript) [Seleccionar]
<!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">
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejercicio 9</title>
<script type="text/javascript">

var textoIntroducido = prompt("Introduce un texto")
var resultado = funcion(comprobacionTexto)
alert(resultado)

function funcion(comprobacionTexto){
if(textoIntroducido == textoIntroducido.toUpperCase()){
resultado += "El texto escrito estaba en mayusculas"
}
else if(textoIntroducido == textoIntroducido.toLowerCase()){
resultado += "El texto escrito estaba en minusculas"
}
else{
resultado += "El texto escrito era una mezcla de minusculas y mayusculas0"
}
return resultado
}

</script>
</head>

<body>
<p>Esta página contiene el primer script</p>
<noscript>Si no tienes activado javascript, activelo para disfrutar el 100% de la página web.</noscript>
</body>
</html>

#!drvy

Ese código esta faltal. Huele a copy&paste a 5000km de distancia.

Puesto que parece que es un ejercicio te doy una pista.
Código (console) [Seleccionar]
ReferenceError: comprobacionTexto is not defined


Usa el developer tools de tu navegador favorito para acceder a la consola de errores javascript y ver posibles problemas.

Saludos

grimeyjavi

Soy nuevo, por si no te has dado cuenta, y no es un copy&paste, solo intento hacerlo para seguir estudiando JS,incluso estuve mirando el codigo resuelto del ejercicio despues de tanto quebradero de caebza, llevare casi dos horas leyendo y tal, he cambiado algunas cosas del codigo y ya me salen, aqui lo dejo.

<!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">
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejercicio 9</title>
<script type="text/javascript">

var textoIntroducido = prompt("Introduce un texto")
var resultado = funcion(textoIntroducido)
alert(resultado)

function funcion(textoIntroducido){
if(textoIntroducido == textoIntroducido.toUpperCase()){
resultado = "El texto escrito estaba en mayusculas"
}
else if(textoIntroducido == textoIntroducido.toLowerCase()){
resultado = "El texto escrito estaba en minusculas"
}
else{
resultado = "El texto escrito era una mezcla de minusculas y mayusculas"
}
return resultado
}

</script>
</head>

<body>
<p>Esta página contiene el primer script</p>
<noscript>Si no tienes activado javascript, activelo para disfrutar el 100% de la página web.</noscript>
</body>
</html>


Otra cosa, por que me dices que esta muy mal hecho?

Usuario Invitado

#3
Tu error está aquí:

Código (javascript) [Seleccionar]
var resultado = funcion(comprobacionTexto)

comprobacionTexto se supone que es una variable que se la pasas por parámetro al método funcion, pero, ¿dónde está declarada?
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

grimeyjavi

Cita de: Gus Garsaky en 26 Marzo 2015, 15:54 PM
Tu error está aquí:

Código (javascript) [Seleccionar]
var resultado = funcion(comprobacionTexto)

comprobacionTexto se supone que es una variable que se la pasas por parámetro al método funcion, pero, ¿dónde está declarada?

Ya lo he cambiado, lo he mostrado en el comentario de arriba, le puse el nombre de la funcion al resultado de la variable.

Usuario Invitado

#5
No vi tu mensaje anterior, por eso contesté para que veas tu error.

CitarOtra cosa, por que me dices que esta muy mal hecho?

  • Colocar código JS implícitamente en el HTML es una mala práctica.
  • Colocar ficheros JS en el head reduce el tiempo de carga de la web.
  • Ese código se ejecutará ni bien la web empiece a ser renderizada. Si haces eso mismo para obtener valores de los controles HTML, te saldrán muchos errores referencedError: X is not defined.
  • No utilizas nombres descriptivos para tus funciones. ¿function funcion? ¿No sería mejor function evaluarTexto?

    No te preocupes, es normal cometer éste tipos de errores cuando recién se empieza. Debes preocuparte por tratar que tu código sea muy limpio y expresivo, por una parte por ser un buen hábito en todo programador no hacer code smell y por otro lado porque facilitará la compresión de otro programador para con tu código, la extensibilidad y la mantenibilidad del mismo.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

grimeyjavi

Cita de: Gus Garsaky en 26 Marzo 2015, 15:59 PM
No vi tu mensaje anterior, por eso contesté para que veas tu error.

  • Colocar código JS implícitamente en el HTML es una mala práctica.
  • Colocar ficheros JS en el head reduce el tiempo de carga de la web.
  • Ese código se ejecutará ni bien la web empiece a ser renderizada. Si haces eso mismo para obtener valores de los controles HTML, te saldrán muchos errores referencedError: X is not defined.
  • No utilizas nombres descriptivos para tus funciones. ¿function funcion? ¿No sería mejor function evaluarTexto?
Si, tienes razon en que es mejor colocarlo en un archivo .js externo, pero entiende que si hago eso en todos los ejercicios tengo que estar liado en crear carpetas y archivos en todos los ejercicios, gracias por decirmelo igualmente.
Respecto a las otras cosas que me has dicho no lo sabia, gracias de nuevo por enseñarme, y por ultimo, lo que me has dicho sobre los errores "referencedError: X is not defined." no he entendido ni papa jejeje

Pablo Videla

#7
Cita de: grimeyjavi en 26 Marzo 2015, 15:37 PM
Bueno, el problema es que no se por que, la funcion no manda el mensaje a la variable resultado... os dejo el codigo en pastebin, estoy mareado, y no se si hago bien en preguntarlo aqui...

Código (javascript) [Seleccionar]
<!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">
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejercicio 9</title>
<script type="text/javascript">

var textoIntroducido = prompt("Introduce un texto")
var resultado = funcion(comprobacionTexto)
alert(resultado)

function funcion(comprobacionTexto){
if(textoIntroducido == textoIntroducido.toUpperCase()){
resultado += "El texto escrito estaba en mayusculas"
}
else if(textoIntroducido == textoIntroducido.toLowerCase()){
resultado += "El texto escrito estaba en minusculas"
}
else{
resultado += "El texto escrito era una mezcla de minusculas y mayusculas0"
}
return resultado
}

</script>
</head>

<body>
<p>Esta página contiene el primer script</p>
<noscript>Si no tienes activado javascript, activelo para disfrutar el 100% de la página web.</noscript>
</body>
</html>


Esta corregido tu codigo?

Que arreglaste?

Muestra lo que arreglaste, lo que yo veo es lo siguiente : Primero que todo poner lo basico a cada fin de una declaracion de eventos, variables el famoso ";"

Segundo,

Código (javascript) [Seleccionar]

var textoIntroducido = prompt("Introduce un texto")
var resultado = funcion(comprobacionTexto)
alert(resultado);


Quieres ver el resultado segun el texto "textoIntroducido" porque pasas por parametros el "comprobacionTexto"

debería quedar asi

Código (javascript) [Seleccionar]

var textoIntroducido = prompt("Introduce un texto");
var resultado = funcion(textoIntroducido);
alert(resultado);


Ahora bien, dinos que otros errores te salen? Fijate siempre en los errores javascript en la consola como todos los demás te han dicho, saludos.


Recien leí todo y vi que ya lo habias resuelto  :xD :xD :xD

#!drvy

#8
CitarOtra cosa, por que me dices que esta muy mal hecho?

Aparte de lo que te dijo el compañero Gus:


  • 1. Todas las variables, funciones y llamadas han de terminarse con ; (punto y coma).
  • 2. Debes utilizar un solo método de declaración de función. En la linea 8 declaras la funcion sin llaves ({ }) y en la linea 11 lo haces con. Esto puede suponer un problema de lectura y puede incluso llegar a confundir el interprete y liar el código (introduciendo la función 'funcion' dentro de 'resultado'.

    Ahora que miro, no estabas declarando una función, estabas llamándola.. ¿ ves a lo que me refiero ?

  • 3. La forma de declarar la variable resultado dentro de 'funcion' no es la mas correcta. Estas utilizando concatenación donde no hace falta.

Un ejemplo del código.
Código (javascript) [Seleccionar]
var textoIntroducido = prompt('Introduce un texto');

var comprobarTexto = function(texto) {

  if(texto === texto.toUpperCase()) {
     return 'El texto esta escrito en mayusculas';
  }

  else if(texto === texto.toLowerCase()) {
     return 'El texto esta escrito en minusculas';
  }

  else {
     return 'El texto contiene mezcla de minusculas y mayusculas.';
  }

};

alert(comprobarTexto(textoIntroducido));


Estos errores se suelen cometer mucho por hacer copy&paste. Por eso dije lo que dije.

Saludos

MinusFour

Cita de: grimeyjavi en 26 Marzo 2015, 15:51 PM
Otra cosa, por que me dices que esta muy mal hecho?

Realmente para ejercicios de practica no necesitas ponerlos en archivos separados. Pero hay dos puntos en cuanto a la funcion:

1. Tu variable resultado en tu scope global la accedes directamente desde la funcion. Es preferible que la variable tenga un contexto local a la funcion.

2. No necesitas concatenar la variable resultado.

En primer lugar, al llamar la funcion la variable resultado en tu scope global no existe. Como concatenas la variable (i.e. resultado = resultado + "El texto blah blah blah") y la variable resultado tecnicamente no existe hasta que la funcion devuelva, acabas con undefined + "El Texto". Si vuelves a llamar a la funcion, nuevamente concatenas sobre la variable en el scope global que ahora contiene: "undefinedEl texto blah blah blahEl Texto blah blah blah".

Código (javascript) [Seleccionar]

var resultado; //Scope global

function localContext(){
  resultado = 'text'; //Scope global
}

localContext();
alert(resultado); //'text'


Código (javascript) [Seleccionar]

var resultado; //Scope global

function localContext() {
  var resultado = 'text'; //Scope local
  return resultado;
}

var operacion = localContext(); //operacion = 'text';
alert(resultado); // '' (empty)


Los puntos y comas no son necesarios siempre y cuando sepas que hace (ASI) Automatic Semi-colon Insertion.. Yo en lo personal trato de evitar el uso de ASI, simplemente porque estoy acostumbrado a otros lenguajes que no utilizan semicolons (punto y coma) y no todos saben exactamente las reglas de ASI por lo que te evitas confundir a los demas. Pero yo diria que es preferencia.