Un formulario es una manera en que una página web envía información a un servidor.
Nosotros no dejamos que en Khan Academy las página web tengan interacción con los servidores
por razones de seguridad.
Así que no enseñamos formularios aquí.
Pero, ahora que estás aprendiendo JavaScript para manipular páginas web,
puedo mostrarte como usar JavaScript para procesar elementos de un formulario.
en lugar de tener que enviarlos a un servidor.
He creado algunos elementos de formulario en esta página para obtener el nombre del usuario,
y su idioma.
Y quiero que la página web le diga "hola" al usuario en su idioma
una vez que se presione este botón.
El primer paso es almacenar el elemento "button" en una variable.
Así que déjenme poner: 'document.getElementById("button")'.
El siguiente paso es definir la función del detector de eventos.
"var onButtonClick = function() {"
y luego aquí dentro, tenemos que anexar el mensaje.
Así que, 'document.getElementById("message")',
tenemos un lindo mensaje "".
Y sólo tenemos que hacer: 'textContent += "You clicked me! Thank you so much!"' ("¡Me presionaste! ¡Muchas gracias!")
Es un "" muy agradecido.
Finalmente, paso tres, vamos a añadir el detector de eventos al botón,
de manera que cuando lo presionen llame a la función.
Entonces, '("click", onButtonClick)'.
Ahora pausa la guía paso a paso, y verifica que funcione como lo esperas.
Ahora, vamos a hacer que en realidad diga algo basándonos en el formulario.
Necesitamos descubrir cómo podemos obtener lo que el usuario teclea en el campo de entrada.
Vamos a hacer una variable para eso.
Así que "var name = document.getElementById("...,
porque tengo un "Id",
así que lo almacenamos ahí.
Vamos a hacer una nueva cadena de caracteres para el saludo, y concatenar el nombre,
entonces: 'var greeting = "Heyaz"', ese es mi saludo favorito.
"+ name".
Ok, entonces ya tenemos una cadena de caracteres que incluye cualquier cosa que esté almacenada en esa variable.
Y ahora, esto de aquí, este contenido de texto, debería ser en realidad "greeting" (El saludo).
Vamos a ver, se ve bien,
obtenemos el nombre que se teclea, y formamos una cadena de caracteres,
y lo anexamos al "".
Pausa la guía paso a paso y revisa si funciona.
No funciona, ¿cierto?
¿Viste que dice: "Heyaz[object Object]", o "Heyaz object Element"?
Asumiendo que tu nombre no es "Object",
y no te ofendas si así fuera, es un gran nombre,
eso significa que algo está mal.
Esperábamos ver lo que tecleaste.
Pero en su lugar vemos que dice "object".
Eso significa que la variable "name" está apuntando a un objeto,
y no está apuntando a la cadena de caracteres que esperábamos.
Probablemente ya habías descubierto el problema.
Almacenamos todo el elemento objeto dentro de la variable "name".
Y el elemento objeto es un objeto grande,
con mucha información acerca del elemento:
todos sus atributos, todos sus métodos.
Para encontrar lo que el usuario tecleó, tenemos que acceder a una propiedad del elemento
en particular: el valor.
Voy a continuar y a teclear: ".value", y eso lo debe corregir.
Pausa la guía paso a paso y prueba de nuevo.
Funcionó ¿cierto?
Ahora, es muy común cometer ese error, así que debes fijarte.
Quiero mostrarte otro error común.
Voy a tomar esta línea de aquí y la voy a mover fuera de la función.
Ahora, pausa la guía paso a paso, teclea en la entrada y presiona el botón.
Si falla como debería, entonces lo que viste fue
una cadena de caracteres vacía, sin tu nombre.
¿Ya descubriste por qué?
Tienes que pensar cuidadosamente sobre cuándo es ejecutada cada línea del código.
En el código actual, el navegador carga la página,
y ejecuta el JavaScript línea por línea.
Primero, almacena el elemento "button" en una variable.
Luego, almacena el valor del elemento de entrada en una variable.
Pero almacena el valor que tiene a la hora de cargar la página,
cuando debería estar vacío.
Luego, define una función y asigna el detector de eventos.
Cuando el detector es llamado, el nombre sigue siendo la misma cadena
de caracteres que era cuando la página fue cargada.
Así que el detector nunca obtiene lo último que el usuario teclea.
Esa es la razón por la que esta línea de código
debe estar dentro de la función del detector de eventos,
para que obtenga el valor cada vez que el evento suceda.
Vamos a añadir algo de código para obtener ahora el valor del idioma,
para asegurarnos de que realmente estás entendiendo.
Dentro del detector, voy a almacenar el idioma en la variable "lang".
Ogh, mira esta indentación, es horrible.
Vamos a alinear estas cosas.
Ok, entonces...
'lang = document.getElementById("lang").value;'
Y puedes ver que estoy escribiendo nombres de variables igual que mis "Id´s",
pero eso es algo que tú no tienes que hacer.
Ahora, quiero que el resultado sea un mensaje diferente con base en el lenguaje seleccionado.
Fijate que el valor no es el que se muestra en el botón desplegable.
Es el valor del atributo en HTML.
Así que "lang" podría ser "en", "es" o "plt".
Eso significa que: 'if (lang === "es")',
entonces el saludo debería ser "Hola,".
Vamos a continuar y a formar esta variable "greeting".
Entonces "greeting" va a ser "Hola," más "name".
Y luego si la variable "lang" es igual a "plt", Pig Latin (Latín de los cerdos),
el saludo será "Ello-hey," más el nombre.
Y luego podemos simplemente usar un "else" para nuestro Inglés.
Y voy a mover esto aquí dentro.
Muy bien.
Oh, y si quieres un desafío divertido extra,
trata de hacer un convertidor de nombres a Pig Latin,
para que el saludo completo, incluyendo los nombres, sea traducido.
Eso estaría muy bien.
Ahora, pausa la guía paso a paso, e introduce tu nombre,
presiona un idioma diferente, y prueba.
Interesante, ¿eh?
Ahora, hay una gran cantidad de cosas que puedes hacer con las entradas de un formulario y un poco de JavaScript:
juegos de palabras, juegos de números, fabricantes de historias...
y si tienes un servidor fuera de Khan Academy,
puedes usar JavaScript para pre-procesar una entrada de formulario
antes de mandarla al servidor.
Hay muchos otros eventos que puedes detectar en formularios,
como eventos de pulsación de teclas y enfoque.
Sólo recuerda considerar el valor de las entradas,
y revisar ese valor en el momento correcto.
Tendrás que practicar esto en el siguiente desafío,
que es uno de mis favoritos.