Um formulário é uma maneira de uma webpage
enviar informações para um servidor.
Nós não deixamos a webpages aqui no
Khan Academy interagir com os servers
por motivos de segurança.
Então nós não ensinamos formulários aqui.
Mas, agora que você está aprendendo
JavaScript para manipular webpages,
vou mostrar como usar JavaScript para
processar elementos de formulários
em vez de ter que enviá-los
para um servidor.
Eu configurei elementos de formulário
aqui para descobrir o nome do usuário,
e a sua linguagem.
E eu quero que a webpage diga "olá"
para o usuário em sua linguagem
uma vez que ele aperte nesse botão.
O primeiro passo é guardar o
elemento botão em uma variável.
Então nós iremos dizer:
`document.getElementById("button")`.
O próximo passar é definir
a função de listner do evento.
`var onButtonClick = function() {`
e então, dentro daqui, nós iremos apenas
começar anexando uma mensagem.
Então,
`document.getElementById("message")`,
nós temos uma pequenina
mensagem legal "div".
E nós iremos apenas: `textContent +=
"Você me clicou! Muito obrigado!"`
Um "div" muito grato!
Finalmente, terceiro passo, nós iremos
adicionar o evento listner para o botão
para que isto possa chamar
a função quando for clicado.
então,`("click", onButtonClick)`.
Pause o tutorial agora, e veja por conta
própria, que ele funciona como o esperado.
Agora, vamos fazê-lo dizer alguma coisa
com base no que há no formulário.
Precisamos descobrir como conseguir o que
o usuário digitou no campo "name".
Vamos fazer uma variável para isso.
Então,
`var name = document.getElementById`,
desde que isso possui uma ID,
então nós colocamos ela lá.
Vamos fazer um novo "string" para
as saudações, e unir o nosso disso,
então `var greeting = "Heyaz"`,
essa é minha saudação favorita,
` + name`.
Okay, então nós temos uma "string", e mais
o que estiver armazenado na variável.
E agora, este aqui, o conteúdo do texto,
realmente deve ser `greeting` .
Vamos ver, isso parece certo
encontramos a entrada do nome,
fizemos uma "string" de saudações,
e nós anexamos isso a um "div".
Pause o tutorial, e veja
se isso funcionou.
Não é bem assim , né?
Você viu "Heyaz [object Object]", ou
"Heyaz object Element"?
Assumir que o seu "nome" não é um Objeto
e sem ofensa , se for,
isso é um ótimo nome--
isso significa que algo está errado.
Nós esperamos ver o que você digitou.
Mas nós vemos "object".
Isso significa que a variável "name" está
apontando para um objeto,
e não a "string" que nós esperávamos
que estivesse apontando.
Talvez você já tenha
descoberto o problema.
Nós armazenamos todo o elemento de
objeto, dentro da variável "name".
E o elemento de um objeto
é um grande objeto
com muita informação sobre o elemento:
todos os seus atributos,
todos os seus métodos.
Para encontrar o que o usuário digitou,
nós temos que acessar uma propriedade
particular dos elementos: o valor.
E eu vou digitar `.value`,
que deve concertar isso.
Pause o tutorial, e tente novamente.
Funcionou, certo?
Agora, esse é um erro comum, então
preste atenção em relação a isso.
Eu quero lhe mostrar mais um erro comum.
Eu vou pegar essa linha daqui,
e mover para fora da função.
Agora, pause o tutorial, digite a entrada
e pressione o botão.
Se ele quebrou da maneira que deveria,
então você deve ter visto,
uma "string" vazia para o seu nome.
Descobriu o porquê?
Você deve pensar com cuidado sobre
cada linha que é executada.
No código atual, o navegador
carrega a página,
e executa o JavaScript linha por linha.
Primeiro, guarda o
elemento botão na variável.
Em seguida, armazena o valor do
o elemento de entrada na variável.
Porém, armazena o valor no
tempo que a página carrega,
o qual estará vazio.
Em seguida, ele define uma função
e atribui o evento listner (que ouve).
Quando o listner é chamado, o "name"
ainda está a mesma "string"
que estava quando a página foi carregada.
Assim, o listner nunca descobre
a última coisa que o usuário digitou.
E por isso essa linha de código
deve ficar no interior dessa
função evento listner,
então ele encontra o valor no tempo
em que o evento ocorre.
Vamos adicionar um código para
olhar o valor da linguagem agora,
para ter certeza que você está
realmente entendendo isso.
Dentro do listner, eu irei armazenar
a linguagem dentro da variável "lang".
Ugh, olhe essa indentação, está horrível.
Vamos alinhar isso.
Okay, então...
[digitando]
E você irá notar que eu estou nomeando
minhas variáveis iguais as minhas IDs,
mais isso é apenas o que eu estou fazendo,
você não precisar fazer o mesmo.
Agora, quero exibir uma mensagem diferente
baseada na linguagem que eles encolheram.
Observe o valor não é o que é mostrado
no drop-down.
É o valor atribuído no HTML.
Então "lang" deve ser "en", "es" ou "plt".
então isso significa que:
`if (lang === "es")`,
então a saudação deverá ser "Hola",
Vamos em frente e fazer
essa variável de saudação aqui.
Então a saudação
será "Hola, " mais o nome.
E se a linguagem por igual a "plt",
a velha e boa "Pig Latin",
a saudação deverá ser,
"Ello-hey, " mais o nome.
e então nós podemos utilizar
um "else" para o nosso Inglês.
Eu vou apenas mover isso para dentro.
Muito bem.
Ooh, e se você quiser um desafio bônus,
tente fazer um conversor
"Pig Latin" para nomes,
para que a saudação inteira,
inclusive o nome, seja traduzida.
Isso seria bem legal.
Agora pause o tutorial,
coloque o seu nome,
escolha uma linguagem diferente e tente.
Legal, né?
Existem várias coisas que você pode fazer
com entradas de formulário e JavaScript:
jogos de palavra, jogos de
números, contador de histórias...
e se você tiver um server
fora do Khan Academy,
você pode utilizar o JavaScript para
pré-processar o formato de saída
antes de mandar para o servidor.
Exitem muito mais eventos que você
pode usar com um formulário,
como pressionar teclas e eventos de foco.
Apenas se lembre de olhar
para o valor de entrada,
e conferir o valor na hora certa.
Você pegará a prática nisso
no próximo desafio,
o qual é o meu favorito.
[Legendado por Gabriel Mello Fernandes]
[Revisado por Paulo Trentin]