Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução Javascript
Introdução Javascript
JavaScript a linguagem de scripting mais popular na internet. O JavaScript permite tornar dinmicas as pginas
HTML. Dessa forma possvel reagir a eventos (com premir um boto), processar e validar dados de um formulrio,
alterar dinamicamente os contedos de uma pgina (incluindo o seu texto), e muito mais.
O JavaScript uma linguagem interpretada. Isto quer dizer que a prpria ferramenta de navegao (o browser)
que interpreta e executa o cdigo JavaScript. A linguagem JavaScript baseada em objectos (mas no em classes).
Isto significa que no h distino entre tipos de objectos, sendo que as propriedades e os mtodos podem ser
adicionados dinamicamente a qualquer objecto. Como consequncia, os tipos de dados das variveis no so
declarados.
Para se familiarizar com a apresentao dos elementos que vo sendo introduzidos ao longo deste guia, sugere-se
que v experimentando criar as suas pginas HTML e verificando no browser o funcionamento dos seus scripts.
O cdigo JavaScript tem de se encontrar entre as etiquetas <script> e </script>. Para indicar ao browser que o
cdigo JavaScript, a etiqueta <script> deve incluir o atributo type="text/javascript".
Devido aos browsers que no suportam JavaScript (o que cada vez mais raro hoje em dia) normal encontrar o
cdigo JavaScript entre comentrios html como no exemplo seguinte:
<html>
<body>
<p>Este um pargrafo em HTML normal</p>
<script type="text/javascript">
<!--
var p = document.createElement("p");
p.innerHTML = "Este um pargrafo em Javascript";
document.body.appendChild(p);
//-->
</script>
</body>
</html>
Dentro do cdigo JavaScript os comentrios de linha so feitos utilizando // e blocos de comentrios comeam com
/* e terminam com */. No exemplo anterior foi utilizado um comentrio de linha para impedir que o interpretador de
JavaScript tente executar o fim de comentrio HTML.
Valores e Variveis
O JavaScript reconhece os seguintes tipos de valores:
Variveis
Como noutras linguagens uma varivel um nome ou identificador que contm um valor.
Dentro uma funo obrigatrio declarar uma varivel com var nas seguintes situaes:
Operadores
Aritmticos
Assuma que y=5 nos exemplos seguintes
Operador
Descrio
Exemplo Resultado
+
Adio
x = y + 2 x = 7
Subtraco
x = y - 2 x = 3
*
Multiplicao x = y * 2 x = 10
/
Diviso
x = y / 2 x = 2.5
%
Resto da diviso x = y % 2 x = 1
++
Incremento
x = ++y
x = 6
--
Decremento
x = --y
x = 4
Atribuio
Assuma que x=10 e y=5 nos exemplos seguintes
Operador Exemplo Resultado
=
x = y
x = 5
+=
x += y x = 15
-=
x -= y
x = 5
*=
x *= y x *= 50
/=
x /= y
x = 2
%=
x %= y
x = 0
Comparao
Assuma que x=5 nos exemplos seguintes
Operador
==
===
!=
!==
>
<
>=
<=
Descrio
igual a
Exemplo Resultado
x == 8
false
x === 5
true
exactamente igual a
x === "5" false
diferente de
x != 8
true
x !== 5
false
exactamente diferente de
x !== "5"
true
maior que
x > 8
false
menor que
x < 8
true
maior ou igual que
x >= 8
false
menor ou igual que
x <= 8
true
Lgicos
Assuma que x=6 e y=3 nos exemplos seguintes
Operador Descrio
Exemplo
Resultado
&&
and
x < 10 && y > 1
true
||
or
x == 5 || y == 5 false
!
not
!(x == y)
true
Outros operadores
Condicional
Permite atribuir um valor a uma varivel em funo do resultado de uma condio.
delete pessoa;
This
Permite aceder ao objecto corrente.
var x = this.value;
Expresses
Condicionais
if ... else
<html>
<body>
<script type="text/javascript">
var sexo;
var p = document.createElement("p");
if (sexo == "M") {
p.innerHTML = "Exmo Senhor";
}
else {
p.innerHTML = "Exma Senhora";
}
document.body.appendChild(p);
</script>
</body>
</html>
switch
<html>
<body>
<script type="text/javascript">
var fruta = "laranja";
var p = document.createElement("p");
switch (fruta) {
case "laranja":
p.innerHTML = "Laranjas a 1 o quilo";
break;
case "ma":
p.innerHTML = "Mas a 1.25 o quilo";
break;
default:
p.innerHTML = "No escolheu a fruta!";
break;
}
document.body.appendChild(p);
</script>
</body>
</html>
Ciclos
for
<html>
<body>
<script type="text/javascript">
for (var conta=0; conta<5; ++conta) {
var p = document.createElement("p");
p.innerHTML = conta;
document.body.appendChild(p);
}
</script>
</body>
</html>
while
<html>
<body>
<script type="text/javascript">
var n=0;
while (n<5) {
n++;
var p = document.createElement("p");
p.innerHTML = n;
document.body.appendChild(p);
}
</script>
</body>
</html>
do while
<html>
<body>
<script type="text/javascript">
i = 1;
do {
var p = document.createElement("p");
p.innerHTML = i;
document.body.appendChild(p);
i++;
} while (i < 5);
</script>
</body>
</html>
break e continue
Dentro de um ciclo possvel utilizar o comando break para interromper a execuo do ciclo (a execuo do script
continua na execuo imediatamente a seguir ao fim do ciclo), ou o comando continue para saltar imediatamente
para o incio da prxima iterao do ciclo.
Manipulao de objectos
for ... in
A expresso for ... in permite iterar todos os elementos de um vector ou todas as propriedades de um objecto. O
cdigo dentro de um bloco for ... in executado uma vez para todos os elementos ou propriedades.
<html>
<head>
<title>Exemplo de For .. in</title>
</head>
<body>
<script type="text/javascript">
carro = {marca:"Suzuki", modelo:"Baleno", cilindrada:"1.3GL"};
var resultado = "";
for (var i in carro) {
resultado += "carro" + "." + i + "=" + carro[i] + "<br />";
}
resultado += "<hr />";
var p = document.createElement("p");
p.innerHTML = resultado;
document.body.appendChild(p);
</script>
</body>
</html>
Funes
As funes so pequenos blocos de cdigo que podem ser invocados noutras partes do programa para expandir a
funcionalidade da linguagem. Existem funes pr-definidas (j vimos algumas neste guio) e os programadores
podem definir as suas prprias funes.
Na definio de uma funo deve incluir:
a keyword function
o nome da funo
a lista de argumentos, entre parnteses e separados por vrgulas
os comandos que definem o cdigo da funo, entre chavetas
a keyword return se a funo retornar um valor
<html>
<head>
<script type="text/javascript">
function quadrado(num) {
return (num*num);
}
</script>
</head>
<body>
<script type="text/javascript">
x1=2;
y1=3;
document.write();
document.write();
var p = document.createElement("p");
p.innerHTML = "<br />"O quadrado de " + x + " = " + quadrado(x1) + "<br />"O quadrado
de " + y + " = " + quadrado(y1);
document.body.appendChild(p);
</script>
</body>
</html>
<html>
<head>
<script type="text/javascript">
function imprime() {
var result = "<br />O carro " + this.marca + " de " + this.ano + " de " +
this.owner;
var p = document.createElement("p");
p.innerHTML = result;
document.body.appendChild(p);
}
function carro(p, m, a) {
this.owner = p;
this.marca = m;
this.ano = a;
this.imprime = imprime;
}
</script>
</head>
<body>
<script type="text/javascript">
carroana = new carro("Ana", "Ford", 1999);
carropb = new carro("Paulo", "Honda", 1995);
carroana.imprime();
carropb.imprime();
</script>
</body>
</html>
Objectos pr-definidos
String
O objecto String utilizado para manipular um pedao de texto. Como deve ser bvio pelo que j foi apresentado ao
longo deste guio, no necessrio criar objectos deste tipo recorrendo ao operador new.
var
var
var
var
var
var
txt = "Ol";
x = txt.length; // x = 3
upper = txt.toUpperCase(); // upper = "OL"
c = txt.charAt(2); // c = ""
i = txt.indexOf("l"); // i = 1
con = txt.concat(upper); // con = "OlOL";
Date
O objecto Date utilizado para trabalhar com datas e horas.
var novaData = new Date();
novaData.setFullYear(2010, 0, 14); // novaData 14 de Janeiro de 2010
novaData.setDate(novaData.getDate() + 5); // novaData cinco dias no futuro
hora = novaData.getHours(); // existem mtodos semelhantes para dias, minutos,
segundos ...
novaData.setMinutes(33); // existem mtodos semelhantes para dias, horas, segundos ...
Array
O objecto Array utilizado para armazenar vrios valores numa s varivel.
meuArray = new Array(5); // cria um array de tamanho 5
meuArray = new Array(1,4,2); // cria um array com 3 elementos
meuArray.length; // indica o tamanho do array
meuArray[0]; // valor do primeiro elemento
Todos os elementos de uma pgina HTML so organizados numa hierarquia de objectos. Isto significa que todos os
elementos so objectos com propriedades e mtodos. Utilizando JavaScript possvel manipular esses objectos,
tornando assim uma pgina HTML em algo verdadeiramente dinmico.
Considere o seguinte cdigo HTML:
<html>
<body bgcolor="white">
<center>
<img src="fcul.gif" name="fcul" />
</center>
<form name="MeuForm">
Nome: <input type="text" name="nome" value="Insira nome" /> <br />
E-mail: <input type="text" name="mail" value="Insira e-mail" /> <br /> <br />
<input type="button" name="botao1"
value="Pressione" onClick="alert('Pressionou boto')" />
</form>
<p>Link: <a href="http://si.di.fc.ul.pt">Sistemas de Informao</a></p>
<p>
<center>
<img src="linha.gif" name="linha" />
</center> ...
Na seguinte imagem pode ver como que esse cdigo apresentado no browser. Na imagem tambm se
identificam os vrios elementos da pgina de acordo com o modelo de objectos do documento.
E na tabela seguinte podemos ver como aceder a alguns dos objectos e suas propriedades em JavaScript.
Propriedade
Valor
Comentrio
o ttulo do documento que
document.title
""
neste exemplo no foi
atribudo
a propriedade background color
document.bgcolor
#ffffff
estabelecida como atributo do
elemento body
o endereo para onde aponta o
document.links[0].href
http://si.di.fc.ul.pt
primeiro link da pgina
o endereo do documento que
http://si.di.fc.ul.pt/ipm/jsobjlocation.href
est a ser apresentado no
ex1.htm
browser
possvel aceder aos objectos e suas propriedades de duas formas. A que foi apresentada atrs acede aos
objectos usando os vrios arrays que organizam todos os elementos de uma pgina HTML. Por exemplo, para
aceder ao valor do primeiro elemento do formulrio podemos escrever:
document.forms[0].elements[0].value
(tinha vantagem se quisessemos percorrer todos elementos de um tipo na pgina)
Mas tambm podemos aceder-lhe utilizando o nome dos elementos. O nome de um elemento valor do
atributo name desse elemento. Assim, se quisermos aceder ao mesmo elemento do exemplo acima, podemos
escrever:
document.meuForm.nome.value
(prefervel para aceder elementos de forma independente dos outros elementos, e sua
ordem)
Quando se carrega uma pgina HTML num browser, esta hierarquia de objectos construda:
Objecto Window
Este objecto de topo da hierarquia JavaScript. Este objecto representa uma janela do browser.
Alguns dos seus mtodos:
Objecto Document
Este objecto representa todo o documento HTML e pode ser usado para aceder a qualquer um dos seus elementos.
Sendo parte do objecto Window pode ser acedido atravs da propriedade window.document.
Alguns dos seus mtodos e propriedades:
Objecto Location
Este objecto na realidade um objecto JavaScript e no um objecto DOM. Tem a informao sobre a localizao
actual e pode ser utilizado para carregar novas pginas. Sendo parte do objecto Window pode ser acedido atravs
da propriedade window.location.
Alguns dos seus mtodos e propriedades:
Objecto Form
Este objecto representa um formulrio HTML, ou seja, por cada etiqueta <form> no documento HTML uma entrada
no array forms[] criada. Este objecto particularmente til porque nos permite aceder informao introduzida
pelos utilizadores nos vrios campos de um formulrio.
Para aceder a um formulrio j vimos que o podemos fazer de duas formas. Atravs do array forms[]
(document.forms[0]) ou atravs do atributo namecaso este tenha sido atribudo (document.myForm).
Para aceder aos elementos do formulrio podemos proceder dessas duas formas tambm. Os vrios elementos
esto armazenados num array chamado elements[]. Assim podemos aceder ao primeiro elemento do formulrio
usando document.forms[0].elements[0]. Se o atributo name desse elemento tiver sido atribudo ento
podemos aceder atravs de document.myForm.text1.
Div e Span
div e span so duas etiquetas HTML muito teis para estruturar o contedo de um documento, e agrup-lo para
fins de formatao. A etiqueta divagrupa contedo em blocos. O comportamento dos browsers ao encontrar um
bloco , tipicamente, colocar uma mudana de linha antes e depois de um bloco. A etiqueta span agrupa contedo
inline. Neste caso o browser no coloca mudanas de linha. No exemplo seguinte pode ver-se a diferena entre as
duas etiquetas.
<p>Isto um <div>bloco div</div> dentro de um pargrafo.</p>
<p>Isto um <span>bloco span</span>dentro de um pargrafo.</p>
E esta a forma como este cdigo HTML apresentado pelo browser:
Isto um
bloco div
dentro de um pargrafo.
Isto um bloco span dentro de um pargrafo.
A utilizao destes blocos conjuntamente com JavaScript permite alterar dinamicamente, de uma forma simples e
eficaz, o contedo e a apresentao de uma pgina HTML. Basta para isso usar um atributo id no bloco, e atravs
do mtodo getElementById() aceder a esse elemento. Atravs de JavaScript podemos alterar o valor do
atributo style do elemento para modificar o estilo de apresentao. Para aceder ao contedo de um bloco
podemos usar o atributo innerHTML. Considere o seguinte cdigo:
<div id="texto">Isto um texto</div>
O valor de texto.innerHTML "Isto um texto".
Eventos
As aplicaes JavaScript so event-driven, ou seja, orientadas por eventos. Eventos so aces que ocorrem como
resultado de acontecimentos (p.ex. a pgina acaba de carregar) ou algo que o utilizador faz (p.ex. carregar num
boto, ou inserir texto num campo). Para reagir aos eventos necessrio definir event handlers. Na tabela seguinte
apresentam-se alguns dos event handlers definidos pelo JavaScript.
Event handler
onBlur
onChange
onClick
onFocus
onKeyPress
(onKeyDown e
onKeyUp)
onLoad
onMouseDown
(onMouseUp)
onMouseMove
Aplica-se a
janelas e todos os elementos de um
formulrio
Ocorre quando
o utilizador tira o foco a
uma janela ou a um elemento
o utilizador muda o valor de
text fields, textareas, select lists
um elemento
buttons, radio buttons, checkboxes,
o utilizador clica no
submit buttons, reset buttons, links
elemento ou no link
janelas e todos os elementos de um o utilizador d o foco a uma
formulrio
janela ou formulrio
documentos, imagens, links, text
areas
document body
onSubmit
formulrio
Exemplo:
<html>
<head>
<script type="text/javascript">
function qty_check(item, min, max) {
var returnVal = false;
if (item.value <= 0)
alert("Introduza um nmero positivo");
else if (parseInt(item.value) < min)
alert("Introduza uma " + item.name + " maior que " + min);
else if (parseInt(item.value) > max)
alert("Introduza uma " + item.name + " menor que " + max);
else
returnVal = true; return returnVal;
}
function validate(theform) {
if (qty_check(theform.quantidade, 2, 999))
alert("Pedido aceite");
else
alert("Desculpe, mas o pedido no foi aceite");
}
</script>
</head>
<body>
<form name="order">
Quantas unidades quer?
<input type="text" name="quantidade" onchange="qty_check(this, 2, 999)" /> <br />
<input type="button" onclick="validate(this.form)" />
</form>
</body>
</html>
Exerccios
1.
2.
3.
4.
5.
Construa uma pgina HTML com um formulrio com um nico boto. Quando o utilizador premir o boto,
dever ser exibida uma caixa de alerta com o texto "Boto seleccionado".
Acrescente um campo para introduo de texto ao formulrio do exerccio anterior. Modifique o
comportamento do boto de modo a que quando for premido, a caixa de alerta apresente o texto que
estiver escrito no campo do formulrio.
Modifique o formulrio de forma a que, quando o utilizador tiver escrito mais que cinco caracteres na caixa
de introduo de texto, aparea uma caixa de alerta indicando quantos caracteres foram escritos.
Acrescente um novo boto ao formulrio. Quando esse boto for premido a pgina do departamento de
informtica da FCUL dever ser carregada.
Construa uma pgina HTML que dever ter um bloco de texto e um "link". Quando o utilizador seleccionar o
"link", o contedo do bloco de texto dever ser substitudo (p.ex. "Texto antigo" passa a "Novo texto"), sem
que uma nova pgina seja carregada.