Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: grimeyjavi en 26 Marzo 2015, 15:37 pm



Título: problema con javascript
Publicado por: 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
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Ejercicio 9</title>
  5. <script type="text/javascript">
  6.  
  7. var textoIntroducido = prompt("Introduce un texto")
  8. var resultado = funcion(comprobacionTexto)
  9. alert(resultado)
  10.  
  11. function funcion(comprobacionTexto){
  12. if(textoIntroducido == textoIntroducido.toUpperCase()){
  13. resultado += "El texto escrito estaba en mayusculas"
  14. }
  15. else if(textoIntroducido == textoIntroducido.toLowerCase()){
  16. resultado += "El texto escrito estaba en minusculas"
  17. }
  18. else{
  19. resultado += "El texto escrito era una mezcla de minusculas y mayusculas0"
  20. }
  21. return resultado
  22. }
  23.  
  24. </script>
  25. </head>
  26.  
  27. <body>
  28. <p>Esta página contiene el primer script</p>
  29. <noscript>Si no tienes activado javascript, activelo para disfrutar el 100% de la página web.</noscript>
  30. </body>
  31. </html>


Título: Re: problema con javascript
Publicado por: #!drvy en 26 Marzo 2015, 15:41 pm
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
  1. 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


Título: Re: problema con javascript
Publicado por: grimeyjavi en 26 Marzo 2015, 15:51 pm
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.

Código:
<!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?


Título: Re: problema con javascript
Publicado por: Usuario Invitado en 26 Marzo 2015, 15:54 pm
Tu error está aquí:

Código
  1. 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?


Título: Re: problema con javascript
Publicado por: grimeyjavi en 26 Marzo 2015, 15:56 pm
Tu error está aquí:

Código
  1. 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.


Título: Re: problema con javascript
Publicado por: Usuario Invitado en 26 Marzo 2015, 15:59 pm
No vi tu mensaje anterior, por eso contesté para que veas tu error.

Citar
Otra 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.


Título: Re: problema con javascript
Publicado por: grimeyjavi en 26 Marzo 2015, 16:02 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


Título: Re: problema con javascript
Publicado por: Pablo Videla en 26 Marzo 2015, 16:22 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
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Ejercicio 9</title>
  5. <script type="text/javascript">
  6.  
  7. var textoIntroducido = prompt("Introduce un texto")
  8. var resultado = funcion(comprobacionTexto)
  9. alert(resultado)
  10.  
  11. function funcion(comprobacionTexto){
  12. if(textoIntroducido == textoIntroducido.toUpperCase()){
  13. resultado += "El texto escrito estaba en mayusculas"
  14. }
  15. else if(textoIntroducido == textoIntroducido.toLowerCase()){
  16. resultado += "El texto escrito estaba en minusculas"
  17. }
  18. else{
  19. resultado += "El texto escrito era una mezcla de minusculas y mayusculas0"
  20. }
  21. return resultado
  22. }
  23.  
  24. </script>
  25. </head>
  26.  
  27. <body>
  28. <p>Esta página contiene el primer script</p>
  29. <noscript>Si no tienes activado javascript, activelo para disfrutar el 100% de la página web.</noscript>
  30. </body>
  31. </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
  1.  
  2. var textoIntroducido = prompt("Introduce un texto")
  3. var resultado = funcion(comprobacionTexto)
  4. alert(resultado);

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

debería quedar asi

Código
  1.  
  2. var textoIntroducido = prompt("Introduce un texto");
  3. var resultado = funcion(textoIntroducido);
  4. 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


Título: Re: problema con javascript
Publicado por: #!drvy en 26 Marzo 2015, 17:07 pm
Citar
Otra 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 (https://es.wikipedia.org/wiki/Concatenaci%C3%B3n) donde no hace falta.

Un ejemplo del código.
Código
  1. var textoIntroducido = prompt('Introduce un texto');
  2.  
  3. var comprobarTexto = function(texto) {
  4.  
  5.   if(texto === texto.toUpperCase()) {
  6.      return 'El texto esta escrito en mayusculas';
  7.   }
  8.  
  9.   else if(texto === texto.toLowerCase()) {
  10.      return 'El texto esta escrito en minusculas';
  11.   }
  12.  
  13.   else {
  14.      return 'El texto contiene mezcla de minusculas y mayusculas.';
  15.   }
  16.  
  17. };
  18.  
  19. alert(comprobarTexto(textoIntroducido));

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

Saludos


Título: Re: problema con javascript
Publicado por: MinusFour en 26 Marzo 2015, 17:54 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
  1. var resultado; //Scope global
  2.  
  3. function localContext(){
  4.  resultado = 'text'; //Scope global
  5. }
  6.  
  7. localContext();
  8. alert(resultado); //'text'

Código
  1. var resultado; //Scope global
  2.  
  3. function localContext() {
  4.  var resultado = 'text'; //Scope local
  5.  return resultado;
  6. }
  7.  
  8. var operacion = localContext(); //operacion = 'text';
  9. alert(resultado); // '' (empty)

Los puntos y comas no son necesarios siempre y cuando sepas que hace (ASI) Automatic Semi-colon Insertion. (http://inimino.org/~inimino/blog/javascript_semicolons). 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.