Professional Documents
Culture Documents
Programao JavaScript
O objeto document
! O objeto document representa o documento HMTL carregado no navegador.
o objeto mais importante da programao JavaScript, pois a partir desse
objeto que o script tem acesso aos elementos da pgina. Assim como visto
para o objeto window, os elementos de uma pgina podem ser referenciados
por um vetor especfico. Dentre esses elementos, os mais importantes so:
"
document.applets: vetor de todos os applets de um documento;
"
document.forms: vetor de todos os formulrios de um documento;
"
document.images: vetor de todas as imagens contidas em um
documento;
"
document.links: vetor de todos as ncoras contidas em um
documento.
! Assim como para o objeto window, a posio de um elemento em seu
respectivo vetor depende de sua posio no documento. Cada elemento pode
tambm ser acessado por seu nome, designado pelo atributo NAME.
! Exemplo: No documento a seguir, a primeira imagem pode ser
referenciada como document.images[0] ou como document.sol.
Da mesma forma, o formulrio pode ser referenciado por
document.forms[0] ou por document.clima. Porm, a segunda
imagem pode apenas ser referenciada por document.images[1],
uma vez que no foi designado um nome para esta imagem.
ELFS, 2003
133
Programao JavaScript
<html>
<head>
<title>Elementos de um Documento</title>
</head>
<body>
<img src="sol.jpg" name="sol">
<form name="clima">
<input type="button" value="clima">
</form>
<img src="chuva.jpg">
</body>
</html>
aula05_01.htm
ELFS, 2003
134
Programao JavaScript
!
ELFS, 2003
135
Programao JavaScript
"
"
"
Exemplo:
aula05_03.htm
<html>
<head>
<title>Testando document.write</title>
</head>
<frameset rows = "50%,*">
<frame name="sup" src="aula05_03a.htm">
<frame name="inf" src="aula05_03b.htm">
</frameset>
</html>
ELFS, 2003
136
Programao JavaScript
aula05_03a.htm
<html>
<head><title>Teste</title>
<script type="text/javascript">
function modifica()
{
parent.inf.document.open();
parent.inf.document.write("Modificamos o documento!");
parent.inf.document.close();
Note que parent refere-se janela do frameset
}
(aula05_03.htm), que contm os frames sup
</script>
(este documento) e inf (o documento de baixo).
</head>
<body>
<a href ="javascript:void(0)" onClick = "modifica();">
Clique aqui para modificar o frame de baixo</a>
</body>
</html>
aula05_03b.htm
<html>
<head>
Note que a substituio do contedo deste frame (pelo texto
<title>Teste</title>
passado pela funo write) feita apenas dentro do navegador,
</head>
ou seja, o arquivo aula05_03b.htm no ser modificado.
<body>
Este apenas um frame<br>
contendo, originalmente, essas duas linhas.
</body>
</html>
ELFS, 2003
137
Programao JavaScript
Tratamento de Eventos em JavaScript
! A linguagem JavaScript dispe de recursos para o tratamento de eventos
especficos para o ambiente da Internet. Em alguns exerccios anteriores
foram utilizados tratamentos de eventos, como o onClick, por exemplo. O
tratamento de eventos deve ser inserido em tags, uma vez que os eventos
ocorrem sobre objetos, tais como imagens, formulrios, links, etc. A sintaxe
bsica para o tratamento de um evento : <tag evento="ao">, onde
ao deve corresponder a instrues (ou chamadas a funes) JavaScript.
Cada objeto possui seu prprio conjunto de eventos para o qual o objeto
responde. Os principais eventos que podem ser includos em um programa
JavaScript so descritos a seguir.
!
<HTML>
<HEAD>
<TITLE>Teste</TITLE>
<SCRIPT language="JavaScript">
ELFS, 2003
aula05_04.htm
138
Programao JavaScript
function pergunta()
{
nome = prompt("Qual seu nome?","");
document.open();
document.write("Oi "+nome+"!<BR>");
document.write("Voc acaba de carregar este documento.");
document.close();
}
function despedida()
{
alert("Espero que tenha gostado do site. At breve!");
}
</SCRIPT>
</HEAD>
<BODY onLoad="pergunta()" onUnload="despedida()">
Veja que site interessante.<BR>
Ou no ?
</BODY>
</HMTL>
ELFS, 2003
139
Programao JavaScript
"
"
aula05_05.htm
ELFS, 2003
function carrega_imagens()
{
imagem1 = new Image();
imagem2 = new Image();
imagem1.src = "imagem1.gif";
imagem2.src = "imagem2.gif";
}
140
Programao JavaScript
Criar um script contendo, alm da funco carrega_imagens(), duas outras
funes: troca_imagem() e muda_pagina(). O script deve alternar entre
uma imagem e outra medida que o mouse est sobre ela ou no est sobre
ela. Um clique sobre a imagem deve carregar uma nova pgina. Usar a funo
prompt("URL","") para obter a URL da nova pgina a ser carregada.
!
ELFS, 2003
141
Programao JavaScript
Exemplos:
aula05_07.htm
<HTML>
<HEAD><TITLE>Teste</TITLE></HEAD>
<BODY>
<FORM>
Nome:<INPUT NAME="nome" TYPE="text" SIZE="30"
onFocus="window.status='Digite seu nome'"
onBlur="window.status='';
alert('\tNote que o campo Nome perdeu o foco!\n'+
'\tVoc notou a barra de status?')">
<p>Sobrenome: <INPUT NAME="snome" TYPE="text" SIZE="30"
onFocus="window.status='Digite seu sobrenome'"
onBlur="window.status='';
alert('Note que o campo Sobrenome perdeu o foco!')">
</FORM></BODY></HMTL>
<HTML>
<HEAD><TITLE>Teste de formulrio</TITLE>
<SCRIPT language="JavaScript">
function Confirma()
{
return confirm("Deseja mesmo apagar os dados?");
}
</SCRIPT>
</HEAD>
<BODY>
ELFS, 2003
aula05_08.htm
142
Programao JavaScript
<FORM NAME="form1"
onReset="return(Confirma())"
onSubmit="alert('Seus dados foram enviados!')">
Nome: <INPUT NAME="nome" TYPE="text" SIZE="30"><BR>
Sobrenome: <INPUT NAME="snome" TYPE="text" SIZE="30"
onChange="alert('Sobrenome alterado!')"><BR>
Sexo: <INPUT TYPE="radio" VALUE="M" NAME="sexo" CHECKED="true">M
<INPUT TYPE="radio" VALUE="F" NAME="sexo"> F<BR>
<BR>
<INPUT NAME="btn1" TYPE="reset" VALUE="Limpar">
<INPUT NAME="btn2" TYPE="submit" VALUE="Enviar">
</FORM>
</BODY>
</HTML>
143
Programao JavaScript
"
"
"
"
"
Objeto Date
Permite ao script acessar a data local da mquina do usurio, alm de dispor
de mtodos para manipular datas e horas com facilidade. Internamente, a
data armazenada como o nmero de milsimos de segundos decorridos
desde 01/01/1970. Considere a seguinte declarao de objeto:
d = new Date("mm/dd/aaaa"). Os seguintes mtodos estaro disponveis para
este objeto:
ELFS, 2003
144
Programao JavaScript
"
"
"
"
"
"
"
"
145
Programao JavaScript
!
A classe Math
Para utilizar os mtodos desta classe no preciso a criao de um objeto: os
mtodos podem ser referenciados diretamente a partir do nome da classe.
"
Math.E: retorna a constante de Euler e (2.712818828459045).
"
Math.PI: retorna a constante pi (3.141592653589793).
"
Math.abs(n): retorna o valor absoluto de n.
"
Math.ceil(n): retorna o teto de n (menor inteiro maior do que n).
"
Math.floor(n): retorna o piso de n (maior inteiro menor do que n).
"
Math.round(n): arredonda o valor de n para um valor inteiro.
"
Math.random(): gera um nmero pseudo-aleatrio entre 0 e 1.
"
Math.sqrt(n): retorna a raiz quadrada de n.
"
Math.log(n): retorna o logaritmo natural de n.
"
Math.pow(n,m): retorna n elevado a m.
"
Math.cos(n): retorna o cosseno de n (em radianos).
"
Math.sin(n): retorna o seno de n (em radianos).
"
Math.tan(n): retorna a tangente de n (em radianos).
"
Math.acos(n): retorna o arcocosseno de n.
"
Math.asin(n): retorna o arcoseno de n.
"
Math.atan(n): retorna o arcotangente de n.
ELFS, 2003
146
Programao JavaScript
Exerccio: Utilizando o mtodo i.toString(b), que converte o valor de um
inteiro i em um nmero na base b, criar um script para uma pgina como a
mostrada abaixo, de forma que cada clique no boto "Mudar Cor" gere uma
cor de fundo aleatria para a pgina. Lembre-se que uma cor em HTML
definida por um string formado por # e por trs nmeros hexadecimais de
dois dgitos (ou seja, trs nmeros cujos valores hexadecimais vo de 00 a FF
ou, equivalentemente, cujos valores decimais vo de 0 a 255).
aula05_10.htm
147
Programao JavaScript
aula05_11.htm
ELFS, 2003
148
Programao JavaScript
!
!
!
ELFS, 2003
149
Programao JavaScript
Caso a resposta seja correta, uma nova pergunta dever ser formulada. Caso
a resposta no seja correta, dever ser exibida a resposta correta e o jogo
dever terminar. Ao final da bateria de perguntas, dever aparecer a
pontuao final do jogador e a opo de recomear uma nova bateria de
perguntas ou sair do jogo. As perguntas e respostas devero ser armazenadas
em uma estrutura do tipo array. Para que a sequncia de perguntas no seja
sempre a mesma, variar a ordem das perguntas dependendo de nmeros
gerados aleatoriamente.
A listagem a seguir mostra uma possvel implementao do jogo.
aula05_12.htm
<HTML>
<HEAD>
<TITLE>Teste de Conhecimentos</TITLE>
<SCRIPT language="JavaScript">
var
var
var
var
var
ELFS, 2003
// questes do jogo
// armazena as partes de uma questo
// controla perguntas j feitas
150
Programao JavaScript
151
Programao JavaScript
function separa_pergunta(questao)
{
s = new String(questao);
i = -1;
for (k = 0; k < 5; k++)
{
j = s.indexOf("|",i+1);
parte[k] = s.substring(i+1,j);
i = j;
}
}
function pontuacao(ok)
{
pontos = new Number(form1.escore.value);
if (ok == 1)
pontos = pontos + 10;
form1.escore.value = pontos.toString(10);
}
function mostrar_pergunta(n)
{
separa_pergunta(quest[n]);
janela = window.open("","","toolbar=no,location=no,directories=no,"+
"status=no,menubar=no,scrollbars=no,"+
"resizable=yes,width=600,height=250");
ELFS, 2003
152
Programao JavaScript
Note o uso do comando with, que simplifica a notao.
Observe tambm a necessidade de chamar a funo pontuao
como opener.pontuao, pois essa funo pertence janela
que abriu esta nova janela
with (janela.document)
{
open();
write("<HTML><HEAD><TITLE>Teste de Conhecimentos</TITLE>");
write("</HEAD><BODY BGCOLOR='#FFCCFF'
onUnload='opener.pontuacao(ok);'>");
write("<B><FONT SIZE='2' COLOR='red' FACE='comic sans MS'>");
write("Jogador: "+jogador+" [nvel "+nivel+"]");
write("<BR><BR>");
write("<FONT COLOR='black'>");
write("Questo "+pnum+": <B>"+parte[0]+"</B><BR>");
for (i = 1; i < 4; i++)
{
write("<BR>"+i+") <A HREF='#' onClick='");
if (i == parte[4])
write("ok = 1;");
else
write("ok = 0;");
write("window.close();'>"+parte[i]+"</A>");
}
write("</FORM></FONT></B></BODY></HMTL>");
close();
}
}
ELFS, 2003
153
Programao JavaScript
function iniciar_jogo()
{
perguntas();
pnum = 0;
for (i = 0; i < 10; i++)
perg[i] = 0;
}
function jogar()
{
jogador = form1.nome.value;
nivel = form1.nivel.value;
ptotal = 2*nivel;
pnum++;
ELFS, 2003
154
Programao JavaScript
else
{
do {
n = Math.round(10*Math.random());
} while (perg[n]==1); // para no repetir pergunta
perg[n] = 1;
mostrar_pergunta(n);
Note que o boto Jogar ser alterado para
if (pnum == ptotal)
Resultado, depois que a ltima questo
form1.btn2.value = "Resultado";
tiver sido formulada ao jogador (esse boto
}
ser desabilitado logo a seguir, conforme
}
comentrio anterior).
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#CCFFFF" onLoad='iniciar_jogo();'>
<FONT SIZE=2 COLOR="maroon" FACE="comic sans MS">
<B>
<FORM NAME="form1" onReset="window.close();"
onSubmit="jogar(); return false;">
Bem-vindo ao Teste de Conhecimentos<BR><BR>
Nome: <INPUT NAME="nome" TYPE="text" SIZE="30"><BR><BR>
Nvel de dificuldade: <SELECT SIZE="1" NAME="nivel">
<OPTION VALUE="1"> Mnimo </OPTION>
<OPTION VALUE="2"> Baixo </OPTION>
<OPTION VALUE="3"> Mdio </OPTION>
<OPTION VALUE="4"> Alto </OPTION>
<OPTION VALUE="5"> Mximo </OPTION>
</SELECT><BR><BR>
ELFS, 2003
155
Programao JavaScript
Seu escore: <INPUT NAME="escore" TYPE="text" SIZE="5" VALUE="0"><BR><BR>
Seu resultado: <INPUT NAME="resultado" TYPE="text" SIZE="40"><BR><BR><BR>
<INPUT NAME="btn1" TYPE="reset" VALUE="Fim">
<INPUT NAME="btn2" TYPE="submit" VALUE="Jogar">
</FORM>
</B>
</FONT>
</BODY>
</HMTL>
Cookies em JavaScript
! O protocolo HTTP foi desenvolvido originalmente como sendo stateless, ou
seja, uma vez que uma pgina tenha sido removida da janela, o browser no
retm informao alguma sobre essa pgina, exceto no objeto history. Da
mesma forma, o servidor web no tem lembrana das requisies dos
clientes. Cookies constituem uma forma de acrescentar um pouco de memria
ao browser armazenando uma pequena quantidade de dados associados
paginas e sites. Sempre que um browser habilitado a aceitar cookies requer
uma pgina ele procura ver se existe algum cookie associado com a URL
daquela pgina. Caso exista, esse cookie enviado ao servidor web como
parte do cabealho HTTP da requisio.
! Um cookie pode ser estabelecido e recuperado em um script por meio da
propriedade document.cookie.
ELFS, 2003
156
Programao JavaScript
!
Para destruir um cookie cuja expirao tenha sido estabelecida como uma
data futura basta alterar seu atributo expires para alguma data que j se
passou.
ELFS, 2003
157
Programao JavaScript
!
criou um cookie, este cookie pode ser lido por qualquer arquivo desta pasta
ou de suas sub-pastas, como por exemplo:
http://feg.unesp.br/cursos/PPI/outro.htm
ou
http://feg.unesp.br/cursos/PPI/DAI/maisum.htm
Para que o cookie possa ser lido por outros documentos preciso estabelecer
seu atributo path. Exemplo: se o cookie for criado como:
document.cookie = "nome=PPI;domain=feg.unesp.br;path=/";
ento, esse cookie poder ser lido por qualquer documento que resida em
uma pasta ou sub-pasta do diretrio http://feg.unesp.br.
Recuperao de cookies
! Os valores dos atributos expires, path, domain e secure no esto
disponveis para serem lidas por um cliente. Por exemplo, se criarmos o
cookie:
ELFS, 2003
158
Programao JavaScript
document.cookie="nome=PPI;domain=feg.unesp.br;expires=2003,12,31"
<html>
<head><title>Exemplo de Cookie</title></head>
<body>
<script language="JavaScript">
var umano = new Date();
umano.setFullYear(umano.getFullYear()+1);
document.cookie="autor=elfs;expires="+umano.toGMTString();
</script>
<h2>Exemplo de cookie</h2>
<a href="aula05_13a.htm">cookie1</a><br>
<a href="aula05_13b.htm">cookie2</a>
<form>
<input type="button" name="botao" value="Recupera cookies"
onClick="alert(document.cookie)">
</form>
</body>
</html>
ELFS, 2003
159
Programao JavaScript
!
ELFS, 2003
160
Programao JavaScript
aula05_13a.htm
<html>
<title>Exemplo de Cookie</title>
</head>
<body>
<h2>Exemplo de cookie</h2>
<form>
<h4>Digite o curso:</h4><input type="text" name="curso">
<input type="button" name="botao" value="Cria cookie"
onClick="document.cookie='curso='+document.forms[0].curso.value">
</form>
</body>
</html>
aula05_13b.htm
<html>
<title>Exemplo de Cookie</title>
</head>
<body>
<h2>Exemplo de cookie</h2>
<form>
<h4>Digite a disciplina:</h4><input type="text" name="discip">
<input type="button" name="botao1" value="Cria cookie"
onClick="document.cookie='disciplina='+document.forms[0].discip.value">
</form>
</body>
Note as referncias absolutas aos campos curso e discip. Observe que como no
</html>
foi dado um nome ao formulrio, temos que usar a matriz de formulrios do documento
(no caso, essa matriz contm apenas um elemento, na posio forms[0]).
ELFS, 2003
161
Programao JavaScript
!
Clique nos links cookie1 e cookie2 e crie novos cookies. Clique novamente no
boto e recupere os cookies existentes. Ser exibida uma janela de alerta
como:
ELFS, 2003
162
Programao JavaScript
!
ELFS, 2003
163