249
Mini-curso de JavaScript Bruno Grangê www.grange.com.br

Minicurso de JavaScript (Portuguese)

Embed Size (px)

Citation preview

Page 1: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

Bruno Grangêwww.grange.com.br

Page 2: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

2

Agenda prevista

Dia 1:• Episódio 1 - Começando com JavaScript

• Episódio 2 - Sintaxe e estrutura

Dia 2:• Episódio 3 - Funções e objetos

Dia 3:• Episódio 4 - Objetos nativos embutidos

Dia 4:• Episódio 5 - As janelas do browser

Dia 5:• Episódio 6 - Debugando o DOM

Page 3: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

3

Episódio 1 - Começando com JavaScript

O que é JavaScript Diferenças de JS e Java O que podemos fazer com JS? Como programar JS? Formas de usar o JS

• Blocos <SCRIPT> embutidos na página

• Arquivos importados

Tratamento de eventos Principais eventos JS

Page 4: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

4

O que é JavaScript?

JavaScript (chamaremos JS) é uma linguagem de programação interpretada criada em 1995 como uma extensão do HTML.

O JS oferece recursos que faltam no HTML, permitindo a criação de páginas interativas e dinâmicas, que são interpretadas localmente, sem precisar recorrer a execução remota de programas no servidor.

O JS é hoje executado na maioria os browsers, e está sendo amplamente disseminado para outras plataformas, como PDAs, terminais inteligentes e aplicações em geral (e.g. Notes).

Page 5: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

5

FSQ – Frequently Smart Questions

Eu consigo executar funções no servidor com o JS?

SIM! O JS no servidor (server-side JS) é uma linguagem que possui o mesmo núcleo que o client-side JS, mas acrescenta estruturas exclusivas para interação com o servidor. Porém, este curso tratará apenas do client-side JS, que roda no browser.

Page 6: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

6

FDQ – Frequently Dumb Questions

JavaScript é Java?

NÃO! JS freqüentemente é confundida com a linguagem Java, provavelmente devido à semelhança do nome. Apesar de possuir sintaxe parecida, JS não tem nada a ver com Java!

O nome "script", que quer dizer roteiro, já indica que se trata de uma linguagem interpretada. Além do nome, podemos apontar diversas outras diferenças:

Page 7: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

7

Diferenças de JS e Java

Interpretada. Programas em Java são compilados para um código de máquina, e depois executados. O JS é interpretados na página.

Simples. Programas em Java são bem mais poderosos e complexos que programas JS, e não estão limitados à página.

Pequena. JS (1.5) consiste de cerca de 400 estruturas. A API do Java (2) possui mais de 20000 estruturas.

Extensão do HTML. Pode-se incluir uma applet em uma página, porém não podemos incluir Java diretamente em uma página Web. O código JS vem embutido dentro da página. Não existe JS sem uma página.

Page 8: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

8

O que podemos fazer com JS?

Realizar operações matemáticas e de computação.

Gerar documentos com aparência definida na hora da visualização, com base em informações do cliente.

Abrir janelas, trocar e manipular informações como o histórico, barra de estado, plug-ins, etc.

Interagir com o conteúdo do documento, alterando propriedades da página.

Interagir com o usuário através de eventos.

Page 9: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

9

Como programar JS?

O ideal é ter a sua disposição:

Um bom editor de textos para editar o HTML• (Scite, UltraEdit, Adobe Dreamweaver, etc).

Alguns browsers comumente utilizados na web para testar• (Microsoft Internet Explorer, Mozilla Firefox, Opera, etc).

Um bom debugger para depurar o código• (Microsoft Script Debugger, Firebug, Granjuxx Debugger, etc).

Page 10: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

10

Formas de usar o JS

Dentro de blocos HTML <SCRIPT> ... </SCRIPT> em várias partes da página.

• Para definir funções usadas pela página, gerar HTML em novas páginas ou alterar o procedimento de interpretação do HTML.

Em um arquivo externo, importado pela página.• Para definir funções que serão usadas por várias páginas em um site.

Dentro de descritores HTML sensíveis a eventos.• Para tratar eventos do usuário em elementos da página durante a exibição.

Page 11: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

11

Blocos <SCRIPT> embutidos na página

A forma mais prática de usar JS é embutindo o código na página dentro de um bloco delimitado pelas tags <SCRIPT> e </SCRIPT>. Pode haver vários blocos <SCRIPT> na página.

<script>... instrucoes JS ...</script>

Page 12: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

12

Blocos <SCRIPT> embutidos na página (cont.)

O descritor <SCRIPT> possui um atributo LANGUAGE que informa o tipo e versão da linguagem utilizada. O atributo LANGUAGE é necessário para incluir blocos em outras linguagens como VBScript. É opcional para JS.

<SCRIPT LANGUAGE="VBScript">... codigo em VBScript ...</SCRIPT>

<SCRIPT LANGUAGE="JavaScript1.5">... codigo JavaScript ...</SCRIPT>

<SCRIPT> ... codigo JavaScript ... </SCRIPT>

Page 13: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

13

Blocos <SCRIPT> embutidos na página (cont.)

Observe o código abaixo:

<BODY> <p>Ultima modificacao: <script language="JavaScript1.5"> <!-- autor = “Bruno Grange"; document.write("<b>" + document.lastModified + "</b>"); document.write("<p>Autor: " + autor);// --> </script></p></BODY>

Page 14: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

14

Blocos <SCRIPT> embutidos na página (cont.)

Tudo o que está em vermelho no código mostrado é JS.

O código JS que foi colocado entre comentários HTML <!-- -->. Isto é usado para os browsers antigos, que não suportam JS, e exibem o código na página em vez de executá-lo.

No código acima, autor é uma variável que recebe por atribuição o texto “Bruno Grange"; document é um objeto JS que representa a página da janela atual do browser. lastModified é uma propriedade da página (texto contendo a data de última modificação do arquivo) e write() é um método que escreve o texto passado como parâmetro na página representada por document.

Page 15: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

15

Blocos <SCRIPT> embutidos na página (cont.)

O ponto (.) é usado para que se possa ter acesso a propriedades e métodos de um objeto. O sinal "+" é usado para concatenar caracteres e strings. As duas barras (//) representam um comentário de linha em JS.

Essa página traria como resultado:

Page 16: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

16

Blocos <SCRIPT> embutidos na página (cont.)

No Domino Designer (chamaremos Designer), fazemos:

Texto (formatado ou não) com pass-thru HTML.

Podemos usar <Computed Value><Computed Value> e

Page 17: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

17

Blocos <SCRIPT> embutidos na página (cont.)

No Designer, podemos colocar o código JS no “JS Header”, permitindo assim que ele possa ser usado por toda página.

Page 18: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

18

Arquivos importados

Muitas vezes é necessário usar um mesmo código várias vezes.

Para isso o JS permite que se crie funções que são chamadas de outras partes da página várias vezes.

As funções geralmente ficam em um bloco <SCRIPT> separado, antes de todos os outros blocos, para que sejam carregadas antes que a página seja exibida.

Page 19: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

19

Arquivos importados (cont.)

Se várias páginas usam as mesmas funções JS, uma boa opção é colocá-las em um arquivo e importá-lo nas páginas que precisarem delas.

Este arquivo deve ter a extensão ".js" e conter apenas código JS (não deve ter descritores HTML, como <SCRIPT>).

No Designer, este arquivo pode ser uma página, o resultado de um agente, uma biblioteca, etc., ou qualquer recurso disponível através de uma URL.

• No Designer 6 é possível criar JS Libraries e importa-las no código.

Page 20: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

20

Arquivos importados (cont.)

Por exemplo, suponha que o arquivo biblio.js possua o seguinte código:

Page 21: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

21

Arquivos importados (cont.)

Para carregar esta função, usa-se a tag <SCRIPT> com SRC:

<script LANGUAGE=JavaScript SRC="biblio.js"></script>(...)<script> resultado = soma(5, 6); document.write("<P>A soma de 5 e 6 é " + resultado);</script>

Page 22: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

22

Arquivos importados (cont.)

No Designer, temos várias opções, porém as melhores são:

Criar uma JS library Criar uma página content type HTML

Page 23: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

23

Arquivos importados (cont.)

Depois, para usar as suas funções, basta invocar as páginas. Abaixo temos um exemplo usando o HTML Head content.

Page 24: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

24

Tratamento de eventos

JS dá suporte a captura de vários eventos do usuário, que vão do arrasto do mouse ao apertar de uma tecla.

Os eventos geralmente vem inseridos em elementos HTML, e são precedidos pelo prefixo “on”.

<FORM><INPUT TYPE="button" onClick="alert('Oh não, você acionou o sistema de autodestruição!')" VALUE="Não aperte este botão"></FORM>

Page 25: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

25

Tratamento de eventos (cont.)

Para usar eventos no designer, você pode usar código em pass-thru HTML, ou usar alguns eventos JS dos elementos Designer.

Page 26: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

26

Tratamento de eventos (cont.)

JS também pode ser acionado através de eventos nativos do HTML, como links e botões de submissão de formulários usando uma URL "javascript:“ (assim como no “http://”)

<a href="javascript:alert('Tem certeza que deseja levantar da cadeira?')“>link </a>

Page 27: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

27

Principais eventos JS

<img>Quando a carga de uma imagem é abortadaonabort

<img>, <body>Quando um erro ocorre durante a carga de uma imagem ou páginaonerror

<body>Ao deixar uma página, janela ou frameonunload

<body>Após carregar uma página, janela ou frameonload

<form>Antes de limpar um formulárioonreset

<form>Antes de enviar um formulárioonsubmit

<a>, <area>Quando o mouse deixa um linkonmouseout

<a>, <area>Quando o mouse está sobre um linkonmouseover

<textarea>, <body>, <form>, <input>, <select>, <option>

Quando um componente de formulário ou janela se torna inativaonblur

<textarea>, <body>, <form>, <input>, <select>, <option>

Quando um componente de formulário ou janela se torna ativaonfocus

<input type=text>, <textarea>, <select>Quando uma seleção ou campo de texto tem seu conteúdo modificadoonchange

<input type=text>, <textarea>Quando um objeto é selecionadoonselect

<a>, <input>Quando um objeto é clicado pelo mouseonclick

Descritores HTML onde é permitidoDescritores HTML onde é permitidoQuando o procedimento é executadoQuando o procedimento é executadoAtributoAtributo

Page 28: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

28

Episódio 2 - Sintaxe e estrutura

Sintaxe básica Variáveis Escopo das variáveis Tipos de dados e literais Caracteres especiais Identificadores e palavras reservadas Operadores e expressões Estruturas de controle de fluxo

• if... else

• for

• while

• break e continue

• for ... in e with

Page 29: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

29

Sintaxe básica

O JS, como a maioria das linguagens, é formada por um bloco de instruções e comentários.

Uma instrução JS pode terminar com um ponto-e-vírgula [ ; ] ou uma nova linha.

Instruções compostas são agrupadas em blocos delimitados por chaves ({ e }), por exemplo, uma função:

function media(a, b) { return (a + b) / 2; }

Page 30: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

30

Sintaxe básica (cont.)

JS é case-sensitive. Logo, function, Function e FUNCTION são três nomes distintos e tratados de forma diferente.

Há duas formas de comentar JS:

// em uma linha com duas barras

/* ou em várias linhas, com os caracteres barra asterísco, e depois asterísco – barra

*/

Page 31: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

31

Variáveis

Para definir uma variável, basta escolher um nome que não seja uma palavra reservada e atribuir um valor:

Uma variável também pode ser declarada sem um valor. Para isto é necessário usar a palavra-chave var (valor undefined):

preco = 10;produto = ‘Caneta para concurso’;

var ladrao;

Page 32: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

32

Escopo das variáveis

Uma variável declarada pela primeira vez dentro de um bloco de função tem escopo local e não existe fora dele.

Variáveis declaradas ou definidas fora do bloco são globais e são visíveis em toda a página:

global = 3; // escopo: toda a paginafunction x() { local = 5; // escopo: somente o bloco da função global = 10;}x();// local nao existe aqui – so em x().// global tem valor 10 para toda a pagina

Page 33: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

33

Escopo das variáveis (cont.)

O uso de var é opcional na definição de variáveis globais. Variáveis locais devem ser definidas com var para garantir que são locais mesmo havendo uma variável global com o mesmo nome, por exemplo:

g = 3; // variável globalfunction x() { var g = 10; // esta variável g é local!}x();// g (global) tem o valor 3!

Page 34: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

34

Tipos de dados e literais

O JS possui apenas 6 tipos de dados fundamentais:

String Number Boolean undefined null Object

Page 35: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

35

Tipos de dados e literais (cont.)

O bject

object

Boolean

G lobal

String

N um ber

M ath

Funct ion

D ateArray

T ipo de dados nativo querepresentaco leçõ es de propr iedadesco ntendo valo res detipo s pr im itivo s,function o u o bject

O bjeto s nativo sem butidos

funct ionT ipo de o bjeto querepresenta funções,métodos eco nstruto res

boolean

st ring

null

num berundefined

T ipos de dados p rim it ivos ( que representam va lo res)

undefined

null

truefalse

"\u0000 - \uFFFF"'\u0000 - \uFFFF'''"""abcde012+$_@..."

M in:M ax:

4 .9 4 0 6 5 e -3 2 4±

± 1 .7 9 7 6 9 e + 3 0 8representa valo resainda não definidos

representa o valornulo

representa valo resboo leanos

representa núm ero sde po nto -flutuanteIEEE 754 co m precisãode 15 casas decim ais(64 bits)

representa cadeiaso rdenadas (eindexáveis) de caracteres U nicode.

NaNInfinity-Infinity

T ipos e objetosnat ivos

E C M AScript

Page 36: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

36

Tipos de dados e literais (cont.)

JS é uma mãe!

Não é preciso declarar as variáveis.

Uma variável só muda de um tipo se durante o script for associado um novo valor de um tipo diferente ao que ela armazenava antes.

Os tipos primitivos number, string e boolean são representados pelos objetos nativos Number, String e Boolean, facilitando o uso de suas propriedades e métodos.

Page 37: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

37

Tipos de dados e literais (cont.)

s = "texto"; // s é string

y = 123; // y é number

s = true; // s agora é boolean!

/* VARIAVEIS CAMALEAO -SE ADAPTAM AO CONTEXTO*/

Page 38: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

38

Tipos de dados e literais (cont.)

Variáveis do tipo number são representados internamente como ponto-flutuante de dupla-precisão.

Números iniciados em "0" são considerados octais e os iniciados em "0x" são hexadecimais.

O tipo number também representa alguns valores especiais, que são infinito positivo (Infinity), infinito negativo (-Infinity) e indeterminação (NaN - Not a Number).

Page 39: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

39

Tipos de dados e literais (cont.)

Exemplos de number

hx= 0xffac; // hexa: 0123456789abcdef

float= 1.78e-45; // ponto-flutuante: .0123456789e-

oct= 0677; // octal: 01234567

soma = h + 12.3 + oct - 10; // conversão automática

Page 40: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

40

Tipos de dados e literais (cont.)

Booleans representam os estados de ligado e desligado através dos literais true e false.

Geralmente são obtidos como resultados de expressões condicionais e lógicas.

if(valorNota==3)

alert(“FALSE!”)

Page 41: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

41

Tipos de dados e literais (cont.)

Strings são identificados por literais contidos entre aspas duplas ("...") ou simples ('...').

O texto entre aspas pode ser qualquer caractere Unicode. Tanto faz usar aspas simples como aspas duplas.

Geralmente usamos aspas simples quando um trecho de código JS que requer aspas é embutido em um atributo HTML, que já utiliza aspas duplas:

<INPUT TYPE="button"

ONCLICK="alert('Oh não!')"

VALUE="Não aperte!">

Page 42: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

42

Tipos de dados e literais (cont.)

A concatenação de strings é realizada através do operador “+”. O operador “+=” (atribuição composta com concatenação)

acrescenta texto a um string existente. Qualquer número ou valor booleano que fizer parte de uma

operação de concatenação será automaticamente transformado em string.

str1 = "Eu sou uma string";str2 = str1 + ' também!';str3 = str2 + 1 + 2 + 3;// str3 contém:// Eu sou uma string também!123str1 += "!"; // mesmo que str1 = str1 + "!".

Page 43: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

43

Tipos de dados e literais (cont.)

Para converter um número ou booleano em string basta utilizá-lo em uma operação de concatenação com uma string vazia:

A conversão de strings em números já não é tão simples. É preciso identificar a representação utilizada, se é ponto-flutuante, hexadecimal.

Para isto, JS fornece duas funções nativas: parseInt(string) e parseFloat(string) que convertem strings em representações de número inteiro e ponto-flutuante respectivamente.

a = 10;b = "" + a; // b contém a string “10”

Page 44: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

44

Tipos de dados e literais (cont.)

a = "10"; b = prompt("Digite um número");// lê string

document.write(a + b); // imprime “105”

c = parseInt(a) + parseInt(b);// converte strings em inteiros decimais

document.write(c); // imprime ”15”

Page 45: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

45

Caracteres especiais

Quando é necessário imprimir aspas dentro de aspas é preciso usar um caractere especial de escape.

O caractere usado para este fim dentro de strings é a contra-barra (\).

Use \' para produzir uma aspa simples e \" para produzir aspas duplas.

A própria contra-barra pode ser impressa usando “\\”.

Outros caracteres também podem ser impressos dessa forma.

Page 46: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

46

Caracteres especiais (cont.)

Retrocesso (backspace)\b

Tabulação horizontal (horizontal tab)\t

Avança página (form feed)\f

Retorno de carro (carriage return)\r

Nova linha (line feed)\n

Contra-barra ( \ )\\

Aspas simples( ' )\'

Aspas duplas ( " )\"

FunçãoCaractereespecial

Page 47: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

47

Caracteres especiais (cont.)

IMPORTANTE!

O HTML ignora completamente espaços em branco extras, novas-linhas, etc. que não sejam provocadas por descritores HTML (como <BR>, <P>, etc.).

Portanto os escapes acima que provocam espaços em branco não aparecerão na página a menos que o texto esteja dentro de um bloco <PRE>.

Page 48: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

48

Identificadores e palavras reservadas

Identificadores JS são os nomes que escolhemos para variáveis e funções. Esses nomes podem ter qualquer tamanho e só podem conter caracteres que sejam:

• números (0-9)

• letras (A-Z e a-z)

• caractere de sublinhado ( _ )

Além disso, embora identificadores JS possam conter números, não podem começar com número ou conter caracteres especiais. Por exemplo, os identificadores abaixo são ilegais:• ping-pong, 5abc, Me&You, m@il()

Page 49: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

49

Identificadores e palavras reservadas (cont.)

As palavras listadas abaixo são utilizadas pelo JS e por isto são consideradas reservadas, não sendo permitido usá-las para definir identificadores para métodos, variáveis ou funções:

break – sai de um loop sem completá-lo continue – pula uma iteração de um loop delete – operador que apaga um objeto false – literal booleano for – estrutura de repetição for function – declara uma função JS if, else – estrutura de controle condicional if-else in – usado em um loop for para iterar pelas propriedades de um

objeto

Page 50: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

50

Identificadores e palavras reservadas (cont.)

new – cria uma nova cópia de um objeto a partir de um protótipo null – literal do tipo null return – retorna de uma função (pode retornar um valor) this – ponteiro para o objeto atual (ou elemento HTML atual) true – literal booleano typeof – operador que identifica o tipo de uma variável undefined – literal do tipo undefined var – declara uma variável void – operador que executa funções sem retornar valor while – estrutura de repetição while with – estabelece o objeto como default dentro de um bloco e outros...

Page 51: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

51

Operadores e expressões

JS possui várias classes de operadores:

De atribuição Aritméticas Booleanas Comparativas Binárias

Page 52: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

52

Operadores e expressões (cont.)

descarta o tipovoid

tipo do objetotypeofvírgula,atribuição com operação

op=

remoçãodeletecondicional?:atribuição=

criaçãonewnot!Operadores de atribuição

Operadores de objetosand&&subtração-

desloc. à dir. s/ sinal>>>or||adição e conc.+

desloc. à direita>>menor ou igual a<=resto%

desloc. à esquerda<<maior ou igual a>=divisão/

not~menor que<multiplicação*

xor^maior que>decremento--n, n--

or|igual a==incremento++n, n++

and&diferente de!=negação- n

Operadores de bitsOperadores lógicosOperadores aritméticos

Page 53: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

53

Operadores e expressões (cont.)

x = 1; // atribuição simples

y += 1; // atribuicao com soma. Equivale: y = y + 1 ou y++

z /= 5; // atribuicao com divisao. Equivale: z = z / 5

texto = 4 + 5 + ":" + 4 + 5; // texto contém 9:45

Page 54: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

54

Operadores e expressões (cont.)

Associatividade Tipo de Operador Operador

Dir a Esq separadores [] . ()

Esq a Dir unários e de objetos e++ e-- ++e –-e +e -e ~ ! new delete void typeof

E a D multiplicação/divisão * / %

E a D adição/sub./concat. + - +

E a D deslocamento << >> >>>

E a D relacional < > >= <=

E a D igualdade == !=

E a D AND &

E a D XOR ^

E a D OR |

E a D E lógico &&

E a D OU lógico ||

D a E condicional ?:

D a E atribuição = += -= *= /= %= >>= <<= >>>= &= ^=

Page 55: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

55

Operadores e expressões (cont.)

Os “++” e “––“ (incremento e decremento) acrescentam ou subtraem 1 da variável antes ou depois do uso, respectivamente.

x = 5;

z = ++x; // z = 6, x = 6; //Incrementa x primeiro, depois atribui a z

z = x++; // z = 6, x = 7; Atribui x a z, depois incrementa

Page 56: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

56

Estruturas de controle de fluxo

As estruturas de controle de fluxo são praticamente as mesmas utilizadas em outras linguagens estruturadas populares.

A sintaxe das principais estruturas em JS é idêntica à sintaxe usada em C, C++ e Java.

Page 57: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

57

if... else

A estrutura if... else é utilizada para realizar controle de fluxo baseado em expressões condicionais:

if (condição) { // instruções caso condição == true

} else if (condição 2) { // instruções caso condição 2 == true

} else { // instruções caso ambas as condições sejam false

}

Page 58: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

58

if... else (cont.)

Exemplo:

if (ano < 0) {alert("Digite um ano D.C.");

} else if ( ((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0)) { alert(ano + " é bissexto!");

} else { alert(ano + " não é bissexto!");}

Page 59: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

59

if... else (cont.)

A operação do if...else pode ser realizada também de uma forma mais compacta (e geralmente menos legível) através do operador condicional. A sua sintaxe é:

• expressão ? instruções se expressão=true : instruções se expressão=false

strValor= document.forms[0].sabeJogar.value;boolIsJogador= strValor==‘SIM’ ? true : false;/* e o mesmo que:if (strValue==‘Sim’) { boolIsJogador= true;} else { boolIsJogador= false;}*/

Page 60: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

60

for

As estruturas for são usadas para repetições baseadas em condições.

O bloco for contém de três parâmetros opcionais: uma inicialização, uma condição e um incremento.

A sintaxe é a seguinte:

for(inicialização; condição; incremento) { // instruções a serem realizadas enquanto condição for true}

Page 61: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

61

for (cont.)

Exemplo:

Neste exemplo, a variável i é local ao bloco for (ela não é conhecida fora do bloco).

Para que ela seja visível fora do bloco é preciso que ela seja declarada fora dele.

for (i = 0; i < 10; i = i + 1) { document.write("<p>Linha " + i);}

Page 62: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

62

for (cont.)

O mesmo for pode ser escrito desta forma:

A única diferença entre esta forma e a anterior é que a variável i agora é visível fora do bloco for.

i = 0;for ( ; i < 10; ) { document.write("<p>Linha " + i); i++;}

Page 63: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

63

for (cont.)

Uma instrução do tipo, no entanto:

Isto gera um loop infinito! Isso trava o browser!

for ( ; ; ) { document.write("<p>Linha");}

Page 64: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

64

while

A estrutura while é executada enquanto uma condição for true:

O incremento acima é apenas um exemplo de aplicação do while, visto que ele não precisa necessariamente ser usado em computações com contadores.

inicialização;while(condição) {

// instruções a serem realizadas enquanto condição for trueincremento;}

Page 65: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

65

while (cont.)

Exemplos:

i = 0while (i < 10) { document.write("<p>Linha " + i); i++;}

i = 0while (i != 1) { document.write("<p>Linha " + i); Math.floor(Math.random()*10)}

Page 66: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

66

break e continue

Para sair a força de loops existem as instruções break e continue. A instrução break sai da estrutura de loops e prossegue com a

instrução seguinte. A instrução continue deixa a execução atual do loop e reinicia

com a passagem seguinte.

Vejamos o exemplo no próximo slide...

Page 67: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

67

break e continue (cont.)

function leiaRevista() { while (!terminado) { passePagina(); if (alguemChamou) { break; // caia fora deste loop (pare de ler) } if (paginaDePropaganda) { continue; // pule esta iteração (pule a pagina e nao leia) } leia(); }...

Page 68: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

68

for... in e with

As estruturas for...in e with são exclusivas do JS e servem para manipulação de propriedades de objetos.

Visto que mais a frente faremos uma melhor apresentação do modelo de objetos do JS, veremos estas instruções com mais calma em breve.

Page 69: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

69

Episódio 3 - Funções e Objetos

Funções nativas Funções definidas pelo usuário Objetos

• Construtores e o operador “new”

• Propriedades

• Métodos Criação de novos tipos de objetos

• for... in

• Referências e propriedades de propriedades Modelo de objetos do HTML Acesso a objetos do browser e da página

• Estruturas e operadores utilizados com objetos

– this– typeof– constructor– void– delete

Page 70: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

70

Funções nativas

O JS possui 6 funções nativas. Essas funções permitem realizar tarefas úteis e podem ou não

retornar algum valor, recebendo como parâmetros com os dados sobre os quais devem operar. Por exemplo, o código abaixo:

Chama parseInt() passando o string "1997" como argumento. A função parseInt() retorna um valor (tipo number) que atribuímos

à variável ano. Se o valor passado não for conversível em número, parseInt()

retorna o valor NaN (não é um número).

ano = parseInt("1997");

Page 71: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

71

Funções nativas (cont.)

Se uma função não retorna valor ou se não interessa guardar o valor de retorno, pode-se simplesmente chamá-la sem atribuí-la a qualquer variável.

A função abaixo, simplesmente executa o código JS que recebe como argumento:

eval("alert('Meeengoool!')");

Page 72: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

72

Funções nativas (cont.)

Além das 6 funções nativas, há muitos outros procedimentos na linguagem.

A grande maioria, porém, não são rigorosamente funções, mas métodos - tipo especial de função associada a um objeto específico.

Page 73: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

73

Funções nativas (cont.)

Faz a operação inversão de escape(string).Exemplo: nome = unescape("Jo%E3o"); // nome contém João

unescape(string)

Converte caracteres de 8 bits em uma representação de 7 bits compatível com o formato url-encoding. Útil na criação de cookies.

Exemplo: nome = escape("João"); // nome contém Jo%E3o

escape(string)

Interpreta o string passado como parâmetro como código JavaScript e tenta interpretá-lo.

eval() é uma função que oferece acesso direto ao interpretador JavaScript.Exemplo: resultado = eval("5 + 6 / 19");

eval(string)

Retorna true se o valor passado não é um número.isNaN(valor)

Converte uma representação String de um número na sua representação Number, levando em consideração o ponto decimal.

Ignora qualquer coisa depois do segundo ponto decimal ou depois de um caractere que não é número.

Se primeiro caractere não for número ou ponto decimal, retorna NaN

parseFloat(string)

Converte uma representação String de um número na sua representação Number.Ignora qualquer coisa depois do ponto decimal ou depois de um caractere que não

é número. Se primeiro caractere não for número, retorna NaN (Not a Number). A base é a representação do String (2, 8, 10, 16)

parseInt(string) ou

parseInt(string, base)

O que fazFunção

Page 74: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

74

Funções definidas pelo usuário

Como já vimos, JS permite ao usuário criar suas próprias funções. O identificador da função deve vir seguido de um par de

parênteses e, entre eles, opcionalmente, uma lista de parâmetros, separados por vírgulas.

A implementação (seqüência de instruções) da função deve vir dentro de um bloco entre chaves “{“ e “}”.

function nomeDaFunção (param1, ..., paramN) { ... implementação ... }

Page 75: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

75

Funções definidas pelo usuário (cont.)

Para retornar um valor, é preciso usar uma instrução return:

Funções não precisam ter argumentos ou retornar valores, podendo apenas executar procedimentos úteis para a página.

function soma (a, b) { return a + b; //soma e retorna os argumentos a e b}

function oi () { alert(‘oi!’); }

Page 76: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

76

Funções definidas pelo usuário (cont.)

Os parâmetros têm um escopo local ao bloco da função e não são visíveis fora dele.

Variáveis utilizadas dentro da função podem ser locais ou não. Para garantir que o escopo de uma variável seja local a uma

função, é necessário declará-las locais usando var

x = 60; // este x é globalfunction soma(a, b) { // a e b são locais (porque são argumentos) var x = a; // este x é uma variável local var y = b; return x + y;}

Page 77: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

77

Funções definidas pelo usuário (cont.)

Identificadores utilizados para nomes de função são propriedades do contexto onde foram definidos.

Não pode haver uma variável global com o mesmo nome que uma função. O uso do identificador de uma função (sem os parênteses ou argumentos) como argumento de uma atribuição, copia a definição da função para outra variável. Por exemplo:

...copia a definição da função soma() para a variável sum, que agora é uma função. sum pode então ser usada como função:

sum = soma;

resultado = sum(25, 40);

Page 78: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

78

Funções definidas pelo usuário (cont.)

Função para descontrair...

function starWars() {/* the */ return “of Jedi”;

}

Page 79: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

79

Objetos

A maior parte da programação em JS é realizada através de objetos.

Um objeto é uma estrutura mais elaborada que uma simples variável que representa tipos primitivos.

Variáveis podem conter apenas um valor de cada vez. Objetos podem conter vários valores, de tipos diferentes, ao mesmo tempo.

Um objeto é, portanto, uma coleção de valores.

Page 80: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

80

Objetos (cont.)

Suponha que usemos as variáveis abaixo para uma data:

Suponha agora que temos que realizar operações com 101 datas!

dia= 27; mes= “Fevereiro”; ano= 2006;

BALAIO DE GATO!

Page 81: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

81

Objetos (cont.)

Para fazer isto, teríamos que criar nomes significativos para cada grupo de dia, mês, ano e evitar que seus valores se misturassem.

A solução para isso é usar um objeto, que trate cada coleção de dia, mês e ano como um grupo.

dtaCarnaval.dia = 27;dtaCarnaval.mes = “Fevereiro”;dtaCarnaval.ano = 2006;

Page 82: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

82

Objetos (cont.)

As variáveis que armazenam objetos são do tipo object. Se uma propriedade tem o tipo object, ela também pode ter suas

próprias propriedades e assim formar uma hierarquia de objetos interligados pelas propriedades:

dataHoje.agora.minuto = 59; // agora: objeto que representa uma hora

Page 83: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

83

Objetos (cont.)

Os tipos primitivos em JS assumem um papel duplo, se comportando ora como tipo primitivo - com apenas um valor, ora como objeto - tendo o seu valor armazenado em uma propriedade.

O programador não precisa se preocupar com os detalhes dessa crise de identidade das variáveis JS, pois a conversão objeto - tipo primitivo e vice-versa é totalmente transparente.

var nome= “Bruno Grange”;tamanhoNome= nome.lengthprimeiroNome= nome.substr(0, 5)

Page 84: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

84

Construtores e o operador “new”

Para criar novos objetos é preciso usar um construtor. O construtor é uma função especial associada ao tipo do objeto

que define todas as características que os objetos criados terão. O construtor cria um novo objeto quando chamado através do

operador new.

dataViagem = new Date(2006, 02, 27);

Chama a função Date()

(construtor) que retorna as

informações necessárias para criar o

objeto.

Variável do tipo object que armazena um objeto Date

Utiliza as informações retornadas por Date() para criar o objeto.

Page 85: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

85

Construtores e o operador “new” (cont.)

Os tipos de objetos nativos Object, Number, String, Boolean, Function, Date e Array possuem os construtores definidos em JS.

Os construtores são funções globais e devem ser chamadas através do operador new para que um objeto seja retornado.

A tabela abaixo relaciona os construtores nativos do JS.

Constrói um objeto do tipo Boolean com valor inicial false, se for chamada sem argumentos ou com o valor especificado.

Boolean()Boolean(valor)

Constrói um objeto do tipo Number com valor inicial zero, se for chamada sem argumentos ou com o valor especificado.

Number()Number(valor)

Constrói objeto genérico do tipo Object. Dependendo do tipo do valor primitivo passado, o resultado pode ainda ser um objeto String, Number ou Boolean.

Object()Object(valor)

Tipo de objeto construídoConstrutor

Page 86: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

86

Construtores e o operador “new” (cont.)

Constrói um objeto do tipo Date. O primeiro construtor constrói um objeto que representa a data e hora atuais. Os outros são formas diferentes de construir datas no futuro ou no passado.

Date()Date(ano, mes, dia)Date(ano, mes, dia, hora, min, seg)Date(string) Date(milissegundos)

Constrói um objeto do tipo Function com corpo da função vazio, com uma string contendo o código JavaScript que compõe o corpo da função, e com argumentos.

Function()Function(corpo)Function(arg1, arg2, ..., corpo)

Constrói um objeto do tipo Array, que representa uma coleção ordenada (vetor) de tamanho inicial zero ou definido através de parâmetro.

Array()Array(tamanho)Array(elem1, elem2, ..., elemn)

Constrói um objeto do tipo String com valor inicial "", se for chamada sem argumentos ou com o valor especificado.

String()String(valor)

Tipo de objeto construídoConstrutor

Page 87: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

87

Construtores e o operador “new” (cont.)

Tipos primitivos podem assumir o papel de objetos. A conversão é feita automaticamente, contudo, também pode ser

feita explicitamente através de um construtor.

Exemplo:

//tipo primitivon = 13;

//objetom = new Number(13);

Page 88: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

88

Propriedades

Cada objeto possui uma coleção propriedades. Essas propriedades podem ser acessadas através do nome do

objeto seguido por um ponto ( . ), ou por um índice ou nomes dentro de colchetes. ( [ ] ).

z = "Zebra"; // variável zebra é do tipo primitivo string ...z [0] = true; // ... Agora vira um objeto do tipo Stringz [1] = "brancas"; // para que possa ter propriedades.z [2] = 6;

Page 89: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

89

Propriedades (cont.)

//pelo nome da propriedade entre colchetesz ["domesticada"] = true;z ["listras"] = "brancas";z ["idade"] = 6;

//forma mais comum//nome da propriedade precedida de um pontoz.domesticada = true;z.listras = "brancas";z.idade = 6;

//acessando os valoresidadeDaZebra = z.idade;

Page 90: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

90

Métodos

As propriedades de um objeto podem conter tipos primitivos, objetos ou funções.

As funções são objetos do tipo Function. Funções que são associadas a objetos são chamadas de

métodos. Todos os objetos nativos do JS possuem métodos. Pode-se ter acesso aos métodos da mesma maneira que se tem

acesso às propriedades:

letra = z.charAt(0); //método charAt(0) retorna "Z" (String)

Page 91: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

91

Métodos (cont.)

Para acrescentar um método ao objeto z, basta criar uma função e atribuir o identificador da função a uma propriedade do objeto:

A instrução acima copia a definição de falar() para a propriedade rinchar, de z.

A propriedade rinchar agora é método de z, como vemos:

function falar() { alert("Rinch, rinch!");}z.rinchar = falar;

z.rinchar();

Page 92: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

92

Criação de novos tipos de objetos

A especificação de um novo tipo de objeto é útil quando precisamos representar tipos de dados abstratos não disponíveis.

Um novo tipo de objeto pode ser especificado simplesmente definindo um construtor.

A função Conta, acima, nada mais é que uma função comum. O que a transforma em construtor é como esta é chamada,

usando new. Tendo-se a função, é possível criar objetos com o novo tipo e

atribuir-lhes propriedades:

function Conta() { }

Page 93: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

93

Criação de novos tipos de objetos (cont.)

Exemplo:

As propriedades correntista e saldo acima existem apenas no objeto cc1, e não em outros objetos Conta. Isto porque foram definidas como propriedades do objeto (como as propriedades que definimos para z), e não do tipo de objeto.

Se ela for definida dentro da definição do construtor Conta(), valerá para todos os objetos criados com o construtor:

cc1 = new Conta(); // cc1 é do tipo object cc1.correntista = "Granjuxx";cc1.saldo = 100.0;

Page 94: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

94

Criação de novos tipos de objetos (cont.)

Exemplo:

Agora todo objeto Conta terá propriedades iniciais definidas. A palavra-chave this é um ponteiro para o próprio objeto. Dentro do construtor, o objeto não tem nome. Quando o

construtor é invocado, this, que significa “este”, se aplica ao objeto que está sendo criado .

Contudo, desta forma, ainda não é muito simples inicializar os valores para as propriedades dos objetos criados desta forma.

function Conta() { this.correntista = "Não identificado"; this.saldo = 0.0;}

Page 95: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

95

Criação de novos tipos de objetos (cont.)

Podemos usar this para criar um outro construtor, mais útil, que receba argumentos:

Não há conflito entre a variável local saldo e a propriedade saldo do objeto Conta pois elas existem em contextos diferentes. Com o novo construtor, é possível criar contas da forma:

function Conta(corr, saldo) { this.correntista = corr; this.saldo = saldo;}

cc2 = new Conta("Granjuxx", 326.50);cc1 = new Conta("Google", 100.0);

Page 96: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

96

Criação de novos tipos de objetos (cont.)

Para definir métodos para o novo tipo, basta criar uma função e copiá-la para uma propriedade do construtor, por exemplo:

function metodo1() { document.write("Saldo: " + this.saldo");}function Conta(corr, saldo) { this.correntista = corr; this.saldo = saldo; this.imprimeSaldo = metodo1;}

Page 97: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

97

Criação de novos tipos de objetos (cont.)

Agora qualquer objeto criado com o construtor Conta() possui um método que imprime na página o valor da propriedade saldo:

cc3 = new Conta("", 566.99);cc3.imprimeSaldo();

// imprime na página: “Saldo: 566.99”

Page 98: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

98

for... in

A estrutura for...in. pode ser usada para ler todas as propriedades de um objeto, e extrair os seus valores. A sua sintaxe é:

...onde variavel é o nome da variável que será usada para indexar as propriedades do objeto. O bloco será repetido até não haver mais propriedades.

Em cada iteração, uma propriedade estará disponível em variavel e seu valor poderá ser extraído usando vetores associativos, da forma objeto[variavel].

for (variavel in nome_do_objeto) {// declarações usando variavel

}

Page 99: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

99

for... in (cont.)

Veja como exemplo a função abaixo, que retorna todas as propriedades de um objeto:

function mostraProps(objeto) { props = ""; for (idx in objeto) { props += idx + " = " + objeto[idx] + "\n"; } return props;}

Page 100: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

100

Referências e propriedades de propriedades

Propriedades podem ser definidas também como objetos, que por sua vez podem conter outras propriedades.

Os dois objetos abaixo possuem uma relação hierárquica: Um Alvo contém um Circulo. É possível, através de um Alvo, ter acesso e propriedades do Circulo que ele contém:

function Circulo(x, y, r) { this.x = x; this.y = y; this.r = r;}function Alvo(circ) { this.circ = circ;}c1 = new Circulo(3, 3, 6);a1 = new Alvo(c1);

Page 101: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

101

Referências e propriedades de propriedades (cont.)

Os dois objetos acima possuem uma relação hierárquica: Um Alvo contém um Circulo. É possível, através de um Alvo, ter acesso e propriedades do Circulo que ele contém:

As instruções acima alteram os valores do círculo do objeto a1, e também os valores do círculo c1, que são o mesmo objeto!

Isto acontece porque o Alvo foi criado usando um círculo já existente, passado por referência e não por valor.

a1.circ.x = 20;a1.circ.y = 10;

Page 102: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

102

Modelo de objetos do HTML - DOM

Dentro de um documento, a hierarquia de objetos e propriedades JS reflete a hierarquia do HTML, através de um modelo de objetos do documento (Document Object Model - DOM).

O DOM relaciona cada elemento HTML, respeitando sua hierarquia, a um objeto JS.

Por exemplo, em HTML um bloco <INPUT TYPE="text"> está relacionado a um objeto do tipo Text. Contudo, o elemento deve estar dentro de um bloco <FORM>, representado por um objeto do tipo Form, que por sua vez, deve estar dentro de um bloco <BODY>, representado por um objeto do tipo Document.

Page 103: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

103

Modelo de objetos do HTML - DOM (cont.)

Page 104: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

104

Modelo de objetos do HTML - DOM (cont.)

Ao lado vemos exemplos de instâncias de um campo e um botão no DOM, seguindo a hierarquia do HTML.

OBS: DOM signinifica Document Object Model, e não tem nada a ver com Domino Object Model.

Page 105: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

105

Modelo de objetos do HTML - DOM (cont.)

O objeto Window é o mais importante da hierarquia do browser. O tipo Window possui uma propriedade document que representa

a página HTML que está sendo exibida na janela. Todas as variáveis globais criadas em um programa JS em HTML

são propriedades temporárias do objeto Global.

<script> var nome;</script>/* nome é propriedade de window, e pode ser utilizada na página de duas formas: */nome = "Sam";window.nome = "Sam";

Page 106: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

106

Acesso a objetos do browser e da página

Cada componente de uma página define um objeto que poderá ser manipulado em JS e agir como referência ao componente.

Digamos que temos uma página com a imagem:<IMG SRC="zebra.gif" name="figura3">

x = window;// x é uma referência ‘Window’y = x.document; // window.document é ref. ‘Document’z = y.figura3 // window.document.figura3 é ref. do tipo Imagez.src = "jegue.gif"; // src é propriedade (tipo String) de Image

Page 107: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

107

Acesso a objetos do browser e da página (cont.)

A expressão acima mostra como a hierarquia de elementos do HTML se reflete em JS através de propriedades.

Para ler propriedades ou invocar métodos de um objeto é necessário citar toda a hierarquia de objetos acima dele.

A única exceção à regra é a referência window, que sempre pode ser omitida. As instruções abaixo fazem a mesma coisa:

window.document.write("Tigres"); document.write("Tigres");

Page 108: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

108

Acesso a objetos do browser e da página (cont.)

Quando criamos uma nova janela e queremos operar sobre ela, podemos batizá-la com um nome qualquer que servirá de referência para operações.

Essa referência é um objeto do tipo Window:

janela2 = window.open("pagina2.html"); /* método open retorna referência do tipo Window que é propriedade da janela atual (window) */janela2.document.open(); janela2.document.write("Eu escrevo na Janela 2");

Page 109: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

109

Manipulação de objetos

Todos os objetos criados em HTML estão automaticamente disponíveis em JS, mesmo que um nome não seja atribuído a eles.

Por exemplo, se há três blocos <FORM>...</FORM> em uma página, há três objetos do tipo Form no JS.

Se eles não tem nome, pode-se ter acesso a eles através da propriedade ‘forms’ definida em Document, que fica armazenada em um vetor, que sempre se inicia em 0 no JS.

frm1 = document.forms[0]; /* mesma coisa que window.document.forms[0], ou document.meuForm, caso forms[0] seja meuForm */frm2 = document.forms[1];

Page 110: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

110

Manipulação de objetos (cont.)

Os vetores são necessários apenas quando um objeto não tem nome.

Se tiver um nome, o ideal é usá-lo já que independe da ordem dos componentes, e pode fornecer mais informações como por exemplo, o tipo do objeto (é um botão, um campo de textos?):

texto = document.forms[0].elements[1]; // qual será o componente? O que será o componente?

Page 111: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

111

Manipulação de objetos (cont.)

Exemplo:

<form name="f1"> <input type=button name="botao1" value="Botão 1"> <input type=text name="campoTexto" value="Texto Muito Velho"></form>texto = document.f1.campoTexto;textoVelho = texto.value;texto.value = "Novo Texto"; //outextoAntigo = document.f1.campoTexto.value;document.f1.campoTexto.value = "Novo Texto";

Page 112: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

112

Estruturas e operadores utilizados com objetos

JS possui várias estruturas e operadores criados especificamente para manipulação de objetos.

Já vimos o uso do operador new, da estrutura for... in e da referência this.

Nesta seção conheceremos aplicações de this em HTML, a estrutura with e os operadores typeof, constructor, void e delete.

Page 113: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

113

this

this é usada como referência ao objeto no qual se está operando. A palavra-chave this pode ser usada apenas quando se está

dentro de um objeto. Só usamos this dentro de funções construtoras e métodos. No caso dos objetos HTML, this só faz sentido quando é usada

dentro de um dos atributos de eventos (ONCLICK, ONMOUSEOVER, HREF, etc.):

<input type=text onclick="alert(this.value)">

Page 114: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

114

with

with é uma estrutura especial eu permite agrupar propriedades de objetos, dispensando a necessidade de chamá-las pelo nome completo. Por exemplo, em vez de usar:

Usamos:

objeto.propriedade1 = 12;objeto.propriedade2 = true;objeto.propriedade3 = "informação";

with(objeto) { propriedade1 = 12; propriedade2 = true; propriedade3 = "informação"; }

Page 115: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

115

typeof

Uma das maneiras de identificar o tipo de um objeto, é através do operator typeof.

Este operador retorna um String que indica o tipo de dados primitivo (object, number, string, boolean ou undefined) do operando ou se é um objeto do tipo Function.

A sintaxe é:

typeof operando// ou typeof (operando)

Page 116: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

116

typeof (cont.)

var coisa; // typeof coisa: undefinedvar outraCoisa = new Object(); // typeof outraCoisa: object var texto = "Era uma vez..."; // typeof texto: string var numero = 13; // typeof numero: number var hoje = new Date(); // typeof hoje: objectvar c = new Circulo(3, 4, 5); // typeof c: objectvar boo = true; // typeof boo: boolean

Page 117: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

117

typeof (cont.)

O operador typeof também retorna o tipo function para qualquer tipo de procedimento, seja método, construtor ou função.

typeof Circulo // functiontypeof eval // functiontypeof document.write // functiontypeof Document // functiontypeof Window // undefined (nao ha construtor p/ o tipo Window)typeof window // object typeof Math// object (Math nao é tipo... é objeto)

Page 118: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

118

constructor

Uma forma mais precisa para identificar o tipo do objeto, é identificar seu construtor.

Toda a definição do construtor pode ser obtida através da propriedade constructor, que todos os objetos possuem.

document.write(c.constructor.name); // imprime Circulodocument.write(hoje.constructor.name); // imprime Dateif (hoje.constructor == “Date") { ...

Page 119: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

119

void

O operador void é usado para executar uma expressão JS, mas jogar fora o seu valor.

É útil em situações onde o valor de uma expressão não deve ser utilizado pelo programa.

A sintaxe está mostrada abaixo (os parênteses são opcionais):

void (expressão);

Page 120: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

120

void (cont.)

Considere o exemplo abaixo. Suponha que a função que submete o formulário enviaFormulario() retorne o texto “enviado”.

Este valor poderia fazer com que a janela tentasse carregar uma suposta página chamada “enviado”:

Para evitar que o valor retorno interfira no código, e ainda assim executarmos a função, usamos void que descarta o retorno:

<a href="javascript: enviaFormulario()">Enviar formulário</a>

<a href="javascript: void(enviaFormulario())">Enviar formulário</a>

Page 121: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

121

delete

O operador delete pode ser usado para remover objetos, elementos de um vetor ou propriedades de um objeto.

Não é possível remover variáveis declaradas com var ou propriedades e objetos pré-definidos.

A sintaxe é a seguinte:

Se a operação delete obtém sucesso, ela muda o valor da propriedade para undefined.

A operação retorna false se a remoção não for possível.

delete objeto;delete objeto.propriedade;delete objeto[índice];

Page 122: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

122

Episódio 4 - Objetos nativos embutidos

O Objeto Global Object Number Boolean Function Prototype String Array Math Date

Page 123: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

123

Resumo

Os objetos nativos embutidos no JS fazem parte do núcleo da linguagem.

Eles não são fornecidos pelo browser, e, com exceção dos objetos Global e Math, é necessário criá-los explicitamente para poder usá-los.

O bject Boolean

G lobal

StringN um ber M athFunct ion D ateArrayFunction() D ate()O bject()A rray() Boo lean() N umber() Str ing()

Page 124: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

124

O Objeto Global

O objeto Global representa o contexto global de execução. Ele define a propriedade window, cujo valor é o próprio objeto

Global.

Objetos de todos os tipos nativos embutidos podem ser criados usando o operador new.

A exceção é Math, que funciona apenas como repositório para agrupar funções e constantes matemáticas utilitárias.

Page 125: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

125

Global (cont.)

Exemplo de Math - utilizamos da forma:

a = Math.random()*256; // função que retorna valor aleatóriob = Number.MAX_VALUE; // constante com maior número representávelc = Date.parse(34532343); // converte milissegundos em uma data

Page 126: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

126

Object

Trata-se de um tipo de objeto genérico usado para representar qualquer objeto criado com new.

Seu construtor raramente é utilizado pelo programador JS. Existe basicamente para dar suporte a operações internas.

Para criar um Object, pode-se fazer:

obj = new Object();

Page 127: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

127

Object (cont.)

Método Ação

toString() Transforma qualquer objeto em uma representação string. É usado automaticamente nas conversões de números em strings, por exemplo, durante a concatenação.

valueOf() Converte um objeto em seu valor primitivo, se houver.

assign(valor) Implementa o operador de atribuição (=).

Page 128: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

128

Number

É um tipo de objeto usado para representar números (tipo primitivo number) como objetos.

O número será transformado em objeto automaticamente quando for necessário.

Um objeto Number pode ser criado explicitamente usando new e o construtor Number():

n = new Number(12);

Page 129: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

129

Number (cont.)

Constante Significado

MAX_value Maior valor numérico representável: 4,94065e-324

MIN_value Menor valor numérico representável: 1,79769e+308

NaN Não é um número: NaN

NEGATIVE_INFINITY Infinito positivo: +Infinity

POSITIVE_INFINITY Infinito negativo: -Infinity

Page 130: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

130

Boolean

É um tipo de objeto usado para representar os literais true e false como objetos.

Um valor booleano é criado sempre que há uma expressão de teste ou comparação sendo realizada, assim, todas as formas abaixo criam objetos Boolean ou valores boolean:

boo = new Boolean(""); // 0, números < 0, null e "": falseboo = new Object(true);boo = true;boo = 5 > 4;

Page 131: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

131

Function

Um objeto Function representa uma operação JS, que pode ser uma função, método ou construtor.

Para criar um objeto deste tipo, basta definir uma nova função com a palavra-chave function:

Considere a função a seguir:

func = new Function("corpo_da_função"); // ou, ...func = new Function(arg1, arg2, ..., argn, "corpo_da_função");

Page 132: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

132

Function (cont.)

O código abaixo obtem o mesmo resultado, desta vez definindo uma variável que representa o objeto:

function soma(calc) { a=calc.v1.value; b=calc.v2.value; calc.v3.value=a+b;}

soma = new Function(calc, "a=calc.v1.value; b=calc.v2.value; calc.v3.value=a+b;");

Page 133: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

133

Function (cont.)

O resultado do uso de Function() acima é um código mais complicado e difícil de entender que a forma usada anteriormente com function.

Também é menos eficiente, visto que as funções declaradas com function são interpretadas toda vez que são chamadas.

O objeto Function tem quatro propriedades que podem ser usadas por qualquer função (tenha sido definida com function ou com new Function()). São elas:

Page 134: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

134

Function (cont.)

Propriedade Significado (tipo da propriedade em itálico)

arguments[] Array. O vetor de argumentos da função

arguments.length Number. O comprimento do vetor de argumentos (retorna o número de argumentos que a função tem)

length Number. Mesma coisa que arguments.length

caller Function. Uma referência para o objeto Function que chamou esta função, ou null se o objeto que a invocou não é uma função. Só tem sentido quando uma função chama a outra. É uma forma da função atual se referir àquela que a chamou.

prototype Object. Através desta propriedade, é possível definir novos métodos e propriedades para funções construtoras, que estarão disponíveis nos objetos criados com ela.

Page 135: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

135

Prototype

Já vimos como acrescentar propriedades temporárias a objetos. As propriedades podem ser permanentes se forem definidas

dentro do construtor do objeto, mas nem sempre temos acesso ao construtor.

Podemos criar novos métodos e propriedades e associá-las a um construtor qualquer usando a sua propriedade prototype. Assim a propriedade passa a ser permanente, e estará presente em todos os objetos.

Page 136: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

136

Prototype (cont.)

Para acrescentar uma propriedade ao tipo Date, por exemplo, podemos fazer:

Agora todos os objetos criados com o construtor Date terão a propriedade ano:

Date.prototype.ano = d.getYear() + 1900;

d = new Date();document.write("Estamos no ano de: " + d.ano);

Page 137: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

137

Prototype (cont.)

Considere a função que iremos prototipar:

Podemos transformá-la em método. O primeiro passo é fazê-la operar sobre os dados do próprio objeto.

function bissexto(umAno) { if (((umAno % 4 == 0) && (umAno % 100 != 0)) || (umAno % 400 == 0)) return true; else return false; }

Page 138: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

138

Prototype (cont.)

Agora basta atribuir a função a uma nova propriedade do protótipo do objeto, que chamamos de isLeapYear:

function bissexto() { // método! if(((this.ano % 4 == 0) && (this.ano % 100 != 0)) || (this.ano % 400 == 0)) return true; else return false;}

Date.prototype.isLeapYear = bissexto;

Page 139: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

139

Prototype (cont.)

Chamando...

hoje = new Date();if (hoje.isLeapYear()) document.write("O ano " + hoje.ano + " é bissexto");else document.write("O ano " + hoje.ano + " não é bissexto");

Page 140: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

140

String

O tipo String existe para dar suporte e permitir a invocação de métodos sobre cadeias de caracteres, representadas pelo tipo primitivo string.

Pode-se criar um novo objeto String fazendo:

ou simplesmente:

s = new String("string");

s = "string";

Page 141: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

141

String (cont.)

Objetos String possuem apenas uma propriedade: length, que pode ser obtida a partir de qualquer objeto string e contém o comprimento da cadeia de caracteres:

Além dessas propriedades, ainda existem os seguintes métodos:

cinco = "zebra".length;seis = s.length;

Page 142: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

142

String (cont.)

Método Chamado Retorna

anchor("âncora") <a name="âncora">Texto</a><>

link("http://a.com") <a href="http://a.com">Texto</a>

small() <small>Texto</small>

big() <big>Texto</big>

blink() <blink>Texto</blink>

strike() <strike>Texto</strike>

sub() <sub>Texto</sub>

sup() <sup>Texto</sup>

italics() <i>Texto</i>

bold() <b>Texto</b>

fixed() <tt>Texto</tt>

fontcolor("cor") <font color="cor">Texto</font> (cor pode ser um valor rrggbb hexadecimal ou nome de cor)

fontsize(7) <font size="7">Texto</font> (o número representa o tamanho e pode ser um número de 1 a 7)

Page 143: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

143

String (cont.)

Os dois métodos a seguir realizam transformações no formato dos caracteres. São extremamente úteis em comparações e rotinas de validação. Retornam String.

Método Chamado Retorna

toLowerCase() texto (converte para caixa-baixa)

toUpperCase() TEXTO (converte para caixa-alta)

Page 144: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

144

String (cont.)

Os métodos seguintes realizam operações baseados nos caracteres individuais de uma string.

Permitem, por exemplo, localizar caracteres e separar tokens com base em delimitadores.

Não afetam os strings originais.

Método Chamado Ação (tipo de retorno em itálico)

charAt(n) String. Retorna o caractere na posição n. A string s inicia na posição 0 e termina em s.length–1. Se for passado um valor de n maior que s.length-1, o método retorna uma string vazia.

indexOf("substring") Number. Retorna um índice n referente à posição da primeira ocorrência de "substring" na string s.

indexOf("substring", inicio)

Number. Retorna um índice n referente à posição da primeira ocorrência de "substring" em s após o índice inicio. inicio é um valor entre 0 e s.length-1

Page 145: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

145

String (cont.)

Método Chamado Ação (tipo de retorno em itálico)

lastIndexOf("substring") Number. Retorna um índice n referente à posição da última ocorrência de "substring" na string s.

lastIndexOf("substring", fim) Number. Retorna um índice n referente à posição da última ocorrência de "substring" em s antes do índice fim. fim é um valor entre 0 e s.length-1

split("delimitador") Array. Converte o string em um vetor de strings separando-os pelo "delimitador" especificado. O método join() de Array faz o oposto.

substring(inicio, fim) String. Extrai uma substring de uma string s. inicio é um valor entre 0 e s.length-1. fim é um valor entre 1 e s.length. O caractere na posição inicio é incluído na string e o

caractere na posição fim não é incluído. A string resultante contém caracteres de inicio a fim -1.

Page 146: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

146

String (cont.)

O método split(), que retorna um objeto do tipo Array, é uma forma prática de separar um texto em tokens, para posterior manipulação. Por exemplo, considere o string:

Fazendo:

Obtemos:sexta[0] = "Sexta-feira" e sexta[1] = "13 de Agosto de 2006".

data = "Sexta-feira, 13 de Agosto de 2006";

sexta = data.split(","); // separa pela vírgula

Page 147: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

147

String (cont.)

Separamos agora o string sexta[1], pelo substring " de " :

obtendo diad[0] = 13, diad[1] = Agosto, diad[2] = 2006. Podemos agora imprimir uma frase:

Válido até 13/Ago/1999

diad = sexta[1].split(" de "); // separa por |de|

[1] = diad[1].substring(0,3); // diad[1] é “Ago”document.write("Válido até " + diad[0] + "/" + diad[1] + "/" + diad[2]);

Page 148: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

148

Array

O tipo Array representa coleções de qualquer tipo, na forma de vetores ordenados e indexados.

Para criar um novo vetor, é preciso usar o operador new e o construtor Array():

direcao = new Array(4);

Page 149: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

149

Array (cont.)

Vetores começam em 0 e terminam em length–1. length é a única propriedade do tipo Array, e contém um número

com o comprimento do vetor. Os elementos do vetor são acessíveis através de índices

passados entre colchetes ([ e ]).

x = direcao[2]; /* copia o conteúdo do terceiro elemento do vetor direcao para a variavel x */

Page 150: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

150

Array (cont.)

O vetor pode ser povoado de mais de várias maneiras. Uma das formas é definir seus termos um a um:

Ou:

Ou:

direcao[0] = "Norte"; direcao[1] = "Sul";direcao[2] = "Leste"; direcao[3] = "Oeste";

direcao = new Array("Norte","Sul","Leste","Oeste");

direcao = “Norte,Sul,Leste,Oeste”.split(“,”);

Page 151: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

151

Array (cont.)

Para recuperar o tamanho do vetor, usa-se a propriedade length que também pode ser redefinida com valores maiores ou menores para expandir ou reduzir o vetor:

tamanho = direcao.length; // direcao possui 4 elementos

direcao.length--; // agora só possui 3

direcao.length++; // possui 4 de novo, mas o último é undefined

Page 152: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

152

Array (cont.)

Não é possível ter índices avulsos. Se uma propriedade de índice 6 for definida:

o novo vetor direcao será atualizado e passará a ter 7 elementos, que terão os valores:

("Norte","Sul","Leste","Oeste",undefined,undefined,"Centro")

direcao[6] = "Centro";

Page 153: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

153

Array (cont.)

Método Ação

join() ou join("separador") Retorna String. Converte os elementos de um vetor em uma string e os concatena. Se um string for passado como argumento, o utiliza para separar os elementos concatenados.

reverse() Array. Inverte a ordem dos elementos de um vetor. Tanto o vetor retornado, quanto o vetor no qual o método é chamado são afetados.

sort() Array. Ordena os elementos do vetor com base no código do caractere. Tanto o vetor retornado, quanto o vetor no qual o método é chamado são afetados.

sort(função_de_ordenação()) Array. Ordena os elementos do vetor com base em uma função de ordenação. A função deve tomar dois valores a e b e deve retornar:

Menor que zero se a < b Igual a zero se a = b Maior que zero se a > b

Page 154: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

154

Array (cont.)

O método join() tem várias aplicações, principalmente quando usado em conjunto com o método split(), de String.

Uma aplicação é a conversão de valores separados por delimitadores em tabelas HTML:

dados = "Norte; Sul; Leste; Oeste"; // Stringvetor = dados.split("; ");s = "<tr><td>";s += vetor.join("</td><td>");s += "</td></tr>";document.write("<table border>" + s + "</table>");

Page 155: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

155

Array (cont.)

Qualquer tipo de dados pode ser contido em vetores. Vetores multidimensionais podem ser definidos como vetores de

vetores. Veja um exemplo:

uf = new Array( new Array("São Paulo", "SP"), new Array("Paraíba", "PB"));// uf[0] é o Array ("São Paulo", "SP")// uf[1][1] é o String "PB"

Page 156: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

156

Math

O objeto Math não é um tipo de objeto, e sim uma propriedade global read-only, servindo apenas de repositório de constantes e funções matemáticas.

Para ter acesso a suas funções e constantes, deve-se usar a sintaxe:

Math.função();Math.constante;

Page 157: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

157

Math (cont.)

Funções Constantes

acos(x) cosseno-1 abs(x) absoluto E e

asin(x) seno-1 max(a, b) máximo LN10 ln 10

atan(x) tangente-1 min(a, b) mínimo LN2 ln 2

atan2(x, y) retorna o ângulo q de um ponto (x,y)

pow(x, y) xy LOG10E log10 e

sin(x) seno LOG2E log2 e

ceil(x) arredonda para cima (3.2 e 3.8 4)

round(x) arredonda (3.49 3 e 3.5 4)

PI p

SQRT1_2 1/sqrt(2)

cos(x) cosseno tan(x) tangente SQRT2 sqrt(2)

exp(x) ex sqrt(x) raiz quadrada

floor(x) arredonda para baixo (3.2 e 3.8 3)

log(x) logarítmo natural

random() retorna um número pseudo-aleatório entre 0 e 1.

Page 158: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

158

Math (cont.)

Exemplo:

function cos() { a = parseInt(document.f1.val1.value) * (Math.PI / 180); document.f1.val1.value = Math.cos(a);}

Page 159: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

159

Date

O tipo Date é um tipo de objeto usado para representar datas. Para criar data que represente a data e hora atuais, chame-o

usando new, da forma:

aquiAgora = new Date();

Page 160: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

160

Date (cont.)

Além da data e hora atuais, Date é usado para representar datas arbitrárias. Para representar uma data e hora específica, pode-se usar funções ou um de seus construtores:

new Date(ano, mes, dia);// Ex: aDia = new Date(06, 07, 29);

new Date(ano, mes, dia, hora, minuto, segundo);// Ex: bDia = new Date(06, 02, 27, 23, 59, 59);

new Date(Data em string: "Mes dd, aa hh:mm:ss"); // Ex: cDia = new Date("February 27, 06 23:59:15");

new Date(milissegundos desde 0:0 de 01/01/1970);// Ex: dDia = new Date(86730923892832);

Page 161: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

161

Date (cont.)

Método Ação

getDate() Retorna Number. Recupera o dia do mês (1 a 31)

getDay() Number. Recupera o dia da semana (0 a 6)

getHours() Number. Recupera a hora (0 a 23)

getMinutes() Number. Recupera o minuto (0 a 59)

getMonth() Number. Recupera o mês (0 a 11)

getSeconds() Number. Recupera o segundo (0 a 59)

getTime() Number. Recupera a representação em milissegundos desde 1-1-1970 0:0:0 GMT

getTimezoneOffset() Number. Recupera a diferença em minutos entre a data no fuso horário local e GMT (não afeta o objeto no qual atua)

Page 162: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

162

Date (cont.)

Método Ação

getYear() Number. Recupera ano menos 1900 (1997 97)

setDate(dia_do_mês) Acerta o dia do mês (1 a 31)

setHours(hora) Acerta a hora (0 a 23)

setMinutes(minuto) Acerta o minuto (0-59)

setMonth(mês) Acerta o mês (0-11)

setSeconds() Acerta o segundo (0-59)

setTime() Acerta a hora em milissegundos desde 1-1-1970 0:0:0 GMT

setYear() Acerta o ano (ano – 1900)

toGMTString() String. Converte uma data em uma representação GMT

toLocaleString() String. Converte a data na representação local do sistema

Page 163: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

163

Date (cont.)

Função Ação

parse(string) Retorna Date. Converte uma data do sistema no formato IETF (usado por servidores de email, servidores HTTP, etc.) em milisegundos desde 1/1/1970 0:0:0 GMT (UTC). O valor de retorno pode ser usado para criar uma nova data no formato JavaScript. Exemplo:

DataIETF = "Wed, 8 May 1996 22:44:53 –0200";umaData = new Date(Date.parse(DataIETF));

UTC() Retorna Number. Converte uma data no formato UTC separado por vírgulas para a representação em milisegundos:

Date.UTC(ano, mês, dia [, horas[, minutos[, segundos]]]);Exemplo:millis = Date.UTC(75, 11, 13, 23, 30);

Page 164: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

164

Episódio 5 - As janelas do browser

O tipo Window Janelas de diálogo Métodos para manipular janelas Janelas com aparência personalizada Eventos Comunicação entre janelas Frames HTML Frames em JS

Page 165: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

165

O tipo Window

O tipo Window representa janelas. A propriedade global window representa a janela do browser onde

roda o script. Através de window, têm-se acesso a outras propriedades que referenciam possíveis sub-janelas, a janela que a criou (se existir) ou frames.

As propriedades e métodos de Window, quando referentes à janela atual (objeto window), podem omitir o nome do objeto:

window.status = "oye!"; // ou status = "oye!";window.open("documento.html"); // ou open("documento.html");

Page 166: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

166

O tipo Window (cont.)

Propriedade Acesso Função

defaultStatus r / w Contém String. Texto que aparece por default na barra de status da janela.

status r / w Contém String. Define texto que aparecerá na barra de status.

name r / w Contém String. Contém nome da janela. Este nome é utilizável em HTML no atributo TARGET em <A TARGET="nome"> e em <BASE TARGET="nome">. Em frames, retorna uma referência Window.

document r Contém Document. Referência à página contida na janela.

history r Contém History. Referência ao histórico da janela.

location r Contém Location. Referência à URL exibida na janela.

Page 167: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

167

O tipo Window (cont.)

Propriedade Acesso Função

opener r Contém Window. Refere-se a janela que abriu esta janela

self r Contém Window. Referência à própria janela. Mesmo que window

window r Contém Window. Sinônimo de self.

frames r Contém Array de Window. Vetor dos frames contidos na janela.

length r Contém Number. Número de elementos Window no vetor frames (mesma coisa que window.frames.length)

parent r Contém Window. Referência à janela que contém esta janela (só existe quando a janela atual é um frame)

top r Contém Window. Referência à janela que não é frame que contém a janela atual (só existe quando a janela atual é um frame)

Page 168: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

168

Janelas de diálogo

Três métodos de Window são usados apenas para criar janelas de diálogo.

Eles são: alert(), confirm() e prompt() Não é possível retornar ào controle da janela (de onde foram

chamados) sem que os diálogos sejam fechados.

Page 169: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

169

Janelas de diálogo (cont.)

alert()

Método: alert("msg")

Exemplo: window.alert("Tenha Cuidado!");

Page 170: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

170

Janelas de diálogo (cont.)

prompt()

Método: prompt("msg") ou prompt("msg", "texto inicial")

Exemplo: nome = prompt("Digite seu Nome!", "Sr(a). ");

Page 171: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

171

Janelas de diálogo (cont.)

confirm()

Método: confirm("msg")

Exemplo: if (window.confirm("Você tem certeza?")) { ... }Retorna true caso clique em OK e false caso clique em Cancelar.

Page 172: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

172

Métodos para manipular janelas

Os métodos restantes definidos para os objetos Window, manipulam parâmetros das janelas, abrem e fecham novas janelas, rolam a página e definem funções de temporização.

Estão listados na tabela abaixo:

Método Ação

open("URL") ou

open("URL","nome") ou

open("URL","nome", "características")

Abre uma nova janela contendo um documento indicado pela URL. Opcionalmente, a janela pode ter um nome que pode ser usado em HTML, ou ter alteradas características como tamanho, layout, etc. (veja tabela abaixo). Retorna uma referência do tipo Window para a janela criada:

filha = window.open("http://a.com/abc.html");

close() Fecha uma janela (não vale para frames para a última janela da aplicação).

Page 173: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

173

Métodos para manipular janelas (cont.)

Método Ação

blur() Torna uma janela inativa

focus() Torna uma janela ativa (traz para a frente das outras, se for uma janela independente).

scroll(x, y) Rola o documento dentro de uma janela de forma que as coordenadas x e y (em pixels) da página apareçam no canto superior esquerdo da área útil da janela, se possível.

setTimeout("instruções", atraso)

Executa uma ou mais instruções JavaScript após um período de atraso em milissegundos. Este método é parecido com a função eval(), mas com temporização. O código continua a ser interpretado imediatamente após o setTimeout(). A espera ocorre em um thread paralelo. Retorna Number: um número de identificação que pode ser passado como argumento do método clearTimeout() para executar a operação imediatamente, ignorando o tempo que falta.

clearTimeout(id) Cancela a temporização de uma operação setTimeout() cujo número de identificação foi passado como parâmetro, e faz com que as instruções do setTimeout() sejam interpretadas e executadas imediatamente.

Page 174: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

174

Janelas com aparência personalizada

As janelas abertas podem ter várias de suas características alteradas no momento em que são abertas. Estas características deverão vir em uma string com uma lista de opções separadas por vírgulas, como o terceiro argumento opcional do método open().

Exemplo:window.open("enter.html", "j2", "height=200,width=400,status");

Page 175: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

175

Métodos para manipular janelas (cont.)

Característica Resultado

height=h h é a altura da janela em pixels: height=150

width=w w é a largura da janela em pixels: width=300

resizable Se estiver presente permite redimensionar a janela

toolbar Se estiver presente, mostra a barra de ferramentas do browser

directories Se estiver presente, mostra a barra de diretórios do browser

menubar Se estiver presente, mostra a barra de menus do browser

location Se estiver presente, mostra o campo para entrada de URLs

scrolling Se estiver presente, mostra barras de rolagem se a página for maior

status Se estiver presente, mostra a barra de status

Page 176: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

176

Eventos

Vários eventos do JS estão relacionados com janelas. Estes eventos são chamados a partir dos atributos HTML e são

aplicáveis aos descritores HTML <BODY> e <FRAME>:

ONBLUR – quando a janela deixa de ser a janela ativa ONERROR – quando ocorre um erro (uma janela deixa de ser

carregada totalmente) ONFOCUS – quando a janela passa a ser a janela ativa ONLOAD – depois que a página é carregada na janela ONUNLOAD – antes que a página seja substituída por outra ou a

janela fechada.

Page 177: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

177

Eventos (cont.)

<body onblur="focus()"> </body>/* qualquer tentativa de minimizar ou selecionar outra janela chamara o evento ONBLUR, que chamará o método focus(), reestabelecendo o estado ativo da janela */

<body onunload="location.href=‘nao.htm';"> </body>/* só é possível sair da janela atual para entrar em outra definida pelo autor da página. */

<body onload=“alert(‘Carregada’)"> </body>/* mostra uma mensagem quando a pagina esta totalmente carregada */

Page 178: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

178

Comunicação entre janelas

Para passar informações para uma janela recém criada, é necessário obter uma referência para a janela.

//criando uma filhanovaJanela = window.open("filha.html");novaJanela.document.write("Suzane Richthofen");novaJanela.focus(); // torna a janela ativa...//na janela filha...opener.focus(); // torna a janela mãe ativaopener.document.forms[0].msg.value = “Tchau mãe!";opener.close(); // mata a mãe

Page 179: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

179

Comunicação entre janelas (cont.)

É interessante verificar se os objetos existem.

if (janela != null) { // verifica se janela existe janela.focus(); // coloca na frente if (janela.document.forms[0] != null) { if (campotexto != null) { janela.document.forms[0].cpo.value = "OK"; } }} else { janela = open("pagina.html"); janela.document.forms[0].elmto.value = "OK";}

Page 180: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

180

Frames HTML

Frames são janelas que estão limitadas dentro de outras janelas. Através de referências especiais podemos manipular as

propriedades de qualquer frame dentro de uma janela.

Uma página de frames não é um documento HTML, pois não contém informação. Todo documento HTML deve ter a forma:

<html> <head> ... </head> <body> ... </body></html>

Page 181: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

181

Frames HTML (cont.)

Contudo, uma janela de quadros tem a forma:

<html> <head> ... </head> <frameset atributos> ... </frameset></html>

<FRAMESET COLS="25%,25%,50%"> ... </FRAMESET>

<FRAMESET ROWS="100,200,*,100"> ... </FRAMESET>

Page 182: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

182

Frames HTML (cont.)

Um bloco <FRAMESET> só pode conter dois tipos de elementos:• descritores <FRAME>, que definem a página HTML que ocupará uma janela.

A página HTML poderá ser uma página de informação comum ou outra página de frames que dividirá a sub-janela novamente em linhas ou colunas.

• sub-blocos <FRAMESET> ... </FRAMESET> que dividirão outra vez a subjanela (em linhas ou colunas) e poderão conter descritores <FRAME> e novos sub-blocos <FRAMESET>.

Page 183: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

183

Frames HTML (cont.)

Exemplo:

<html><head> ... </head><frameset cols="50%,50%"> <frame name="janela1" src="um.html"> <frameset rows="35%,65%"> <frame name="janela2_1" src="dois.html"> <frame name="janela2_2" src="tres.html"> </frameset></frameset></html>

Page 184: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

184

Frames HTML (cont.)

P ágin a W eb

F orm u lário

ic h a u s e t in u n n u s b u u sz ic h a u s c h a r w u ltt d u sp a r s ta k c a n li t te s imic h a u s e t in u n n u s b u u sz ic h a u s c h a r w u ltt d u sp a r s ta k c a n li t te s im

ic h a u s e t in u n n u s b u u sz ic h a u s c h a r w u ltt d u sp a r s ta k c a n li t te s imic h a u s e t in u n n u s b u u sz ic h a u s c h a r w u ltt d u sp a r s ta k c a n li t te s im

aP ág in a W e b

F o rm u lá r io

ich aus e t in unnus b uusz ich aus char w ult t du spar s tak can lit te s imich aus e t in unnus b uus

c

páginas de informação

página de informação

página de frames

página de frames P ág in a W e b

F o rm u lá r io

ich aus e t in unnus b uusz ich aus char w ult t du s

b

Janela do browser

janela 1

(janela 0)

janela 2

janela 2-1

janela 2-2

um .htm l

frset1.h tm l

frset2.h tm l

dois.htm l

tres.htm l

Page 185: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

185

Frames em JS

Os quadros (frames) em JS são acessados através de vetores indexados pela ordem de exibição do quadro na página.

Os quadros filhos são indexados da mesma forma, porém o acesso ao pai é feito de forma diferenciada que veremos adiante.

Page 186: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

186

Frames em JS (cont.)

<html> <head> ... </head> <frameset cols="50%,50%"> <!-- frames[0] --> <frame name="janela1" src="um.html"> <frameset rows="35%,65%"> <!-- frames[1] --> <frame name="janela2_1" src="dois.html"> <!-- frames[2] --> <frame name="janela2_2" src="tres.html">

</frameset> </frameset></html>

Page 187: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

187

Frames em JS (cont.)

Um script nesta página pode manipular os seus frames de duas formas: pelo nome ou através do vetor frames.

O código abaixo mostra duas maneiras diferentes de mudar a cor de fundo das páginas do primeiro e do último frame:

frames[0].document.bgColor = "red";frames[2].document.bgColor = "blue";

Page 188: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

188

Frames em JS (cont.)

Visto que os comandos geralmente são chamados dos quadros, devemos instanciar a janela parent em caso de um quadro filho:

parent.frames[0].document.bgColor = "red";// ... ou no caso de uma janela nomeadaparent.janela1.document.bgColor = "red";

Page 189: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

189

Frames em JS (cont.)

O código acima não funcionaria se tivéssemos usado a estrutura de frames com três níveis, como no exemplo da seção anterior.

Para ter acesso ao primeiro frame, teríamos que subir dois níveis, até o nível mais alto, para então descer um nível até frames[0].

Poderíamos usar parent duas vezes ou a propriedade top, que representa o nível mais alto:

parent.parent.frames[0].document.bgColor = "red";top.janela1.document.bgColor = "red";

Page 190: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

190

Frames em JS (cont.)

A figura abaixo mostra formas de comunicação entre frames:

P á g in a W eb

P á g in a W eb

P á g in a W eb

F o rm u lá r io

F o rm u lá r io

F o rm u lá r io

ich a u s e t in u n nu s b u u sz ic h a u s c h a r w u ltt d u sp a r s tak c an li t te simich a u s e t in u n nu s b u u sz ic h a u s c h a r w u ltt d u sp a r s tak c an li t te sim

ich a u s e t in u n nu s b u u sz ic h a u s c h a r w u ltt d u sp a r s tak c an li t te simich a u s e t in u n nu s b u u s

ich a u s e t in u n nu s b u u sz ic h a u s c h a r w u ltt d u s

ich a u s e t in u n nu s b u u sz ic h a u s c h a r w u ltt d u sp a r s tak c an li t te simich a u s e t in u n nu s b u u s

a

c

b

parent = top

parent.parent = top

top

parent.frames[0]

top.frames[1].frames[1]

top.frames[0] = parent.parent.frames[0]

<S CRIPT> em dois.htm l

<S CRIPT> em tres.htm l

<S

CR

IPT

> e

m u

m.h

tml

dois .htm l

um .htm l

tres.htm l

Page 191: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

191

Episódio 6 - Debugando o DOM

O DOM Navigator MIMETypes History Location Document Geração de páginas on-the-fly Formulários Tipos de campo Formulário no Notes Form Objetos Button, Reset e Submit Objetos Password, Text e Textarea Objeto Checkbox e Radio Objetos Select e Option Objeto File Validando um formulário AJAX

• O objeto XMLHttpRequest Microsoft Script Debugger Firebug Granjuxx Debugger

Page 192: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

192

O DOM

Arquivo para imprimir e guardar com amor.

Adobe Acrobat 7.0 Document

Page 193: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

193

Navigator

O objeto Navigator representa as propriedades do browser.

Usando suas propriedades e métodos booleanos (que retornam true ou false) é possível identificar as possibilidades de um cliente e desenvolver páginas personalizadas para aquele cliente.

if (navigator.appName == "Microsoft Internet Explorer") write(“IE”);

Page 194: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

194

Navigator (cont.)

Propriedade Descrição

userAgent Contém String. Informação contida no cabeçalho HTTP User-Agent. É a combinação das propriedades appCodeName e appVersion.Exemplos:

Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)

appCodeName Contém String. Contém o nome interno do browser. Exemplo: Mozilla

appVersion Contém String. Contém informações sobre a versão.Exemplos:

4.0 (compatible; MSIE 4.0; Windows 95) 4.5 [en] (Win95; I)

appName Contém String. Contém o nome oficial do browser. Exemplos:

Microsoft Internet Explorer Netscape

mimeTypes Contém Array. Um vetor de tipos MIME que descrevem os tipos MIME reconhecidos e suportados pelo browser, internamente, via plug-ins ou através de aplicações auxiliares (do sistema operacional).

plugins Contém Array. Um vetor com todos os plug-ins instalados no cliente.

Page 195: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

195

MIMETypes

Propriedade Descrição (e tipo de dados)

name String. Tipo MIME no formato tipo/subtipo. Exemplo:navigator.mimetypes["text/html"].name contém “text/html”

description String. Descrição em inglês do tipo de conteúdo representado pelo tipo MIME. Exemplo:

navigator.mimetypes["text/html"].description contém “Hypertext Markup Language”

suffixes String. Lista de extensões comuns de arquivos associados com este tipo MIME. Exemplo:

navigator.mimetypes["text/html"].suffixes contém “html, htm, shtml”

Page 196: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

196

History

O objeto History é um vetor de strings somente-leitura usado por uma janela do browser para armazenar os lugares já visitados durante uma sessão.

<form><input type=button value="&lt; Volta"onclick="opener.history.back()">

Page 197: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

197

History (cont.)

Método Ação

go(±n) ou go("string")

Avança ou volta n páginas no histórico. A segunda forma procura no histórico até encontrar a primeira página que tenha a string especificada no título do documento ou nas palavras da sua URL.

back() Volta uma página no histórico (simula o botão “Back” ou “Voltar” do browser).

forward() Avança uma página no histórico (simula o botão “Forward” ou “Avançar” do browser).

toString() Retorna String. Converte o histórico em uma tabela HTML de URLs, cada uma com seu link. Pode ser impressa usando document.write(). Só funciona se o modelo de segurança data-tainting estiver ativado (uso restrito).

Page 198: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

198

Location

Location é uma propriedade das janelas que representa a URL cujo documento está sendo exibido.

location.href = “http://www.grange.com.br”;

Page 199: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

199

Location (cont.)

Propriedade Descrição

href A URL completa. Exemplo:http://www.abc.com:80/sub/dir/index.html?name=Cookie1#parte2

protocol O protocolo da URL. Ex: http:

host O nome da máquina. Ex: //www.abc.com

port A porta do servidor. Ex: 80

hostname O nome do servidor. Ex: //www.abc.com:80

pathname O caminho. Ex: /sub/dir/index.html

Page 200: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

200

Document

O objeto document representa o documento HTML atual. document é uma propriedade de window e, portanto, pode ser usado sem fazer referência a window:

janela = open("nova.html");janela.document.bgColor = "green";parent.fr1.fr1_2.document.forms[0].b1.click();

Page 201: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

201

Document (cont.)

Propriedade Acesso Função

bgColor r / w Contém String. Define ou recupera cor de fundo da página. Pode um string contendo código hexadecimal do tipo #rrggbb ou nome da cor (red, blue, navy, etc.)

fgColor r / w Contém String. Define ou recupera cor do texto na página.

linkColor r / w Contém String. Define ou recupera cor de links na página.

alinkColor r / w Contém String. Define ou recupera cor de links ativos.

vlinkColor r / w Contém String. Define ou recupera cor de links visitados.

title r Contém String. Recupera o título (<TITLE>) do documento.

links r Contém Array de objetos Link. Para obter a quantidade de links <A HREF> no documento: document.links.length

applets r Contém Array de objetos Applet. Para obter a quantidade de applets <APPLET> no documento: document.applets.length

anchors r Contém Array de objetos Anchor. Para obter a quantidade de âncoras <A NAME> no documento: document.anchors.length

Page 202: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

202

Document (cont.)

Propriedade Acesso Função

forms r Contém Array de objetos Form. Para obter a quantidade de blocos <FORM> no documento: document.forms.length

images r Contém Array de objetos Image. Para obter a quantidade de imagens <IMG> no documento: document.images.length

plugins r Contém Array de objetos PlugIn. Mesma coisa que embeds

location r Contém String com URL do documento.

URL r Mesma coisa que location.

referrer r Contém String com URL do documento que contém um link para o documento atual.

lastModified r Contém String. A string recebida informa a data da última modificação do arquivo. Está no formato de data do sistema. Pode ser convertida usando Date.parse() e transformada em objeto ou automaticamente em String.

domain r / w Contém String com o domínio dos arquivos referenciados.

cookie r / w Contém String. Usado para ler e armazenar preferencias do usuário no computador do cliente.

Page 203: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

203

Document (cont.)

Método Ação

write("string") ou writeln() write("arg1","arg2",... ,"argn")

Recebe e concatena zero ou mais argumentos separados por vírgulas e os escreve na página atual.

open() ouopen("tipo/subtipo")

Abre um canal de fluxo de dados para document de forma que as chamadas document.write() subseqüentes possam acrescentar dados ao documento. o tipo/subtipo é por default text/html.

close() Imprime na página qualquer texto não impresso enviado à document e fecha o fluxo de saída de dados.

clear() limpa a janela ou frame que contém document.

Page 204: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

204

Geração de páginas on-the-fly

A melhor forma de gerar uma nova página é começar com uma nova janela.

Através da referência da nova janela, pode-se abrir então um fluxo de dados para escrever nela.

O primeiro passo, portanto, é criar a nova janela:

w1 = open(""); // abre janela vazia, sem arquivo

Page 205: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

205

Geração de páginas on-the-fly (cont.)

Para que o documento completo seja exibido, é preciso que o fluxo de dados seja fechado

w1.document.open(); // abre documento para gravaçãow1.document.write("<html><head>\n<title>Nova Página</title>\n");w1.document.write("</head>\n<body bgcolor=white>\n");w1.document.write("<h1 align=center>Nova Página</h1>");

w1.document.close(); // imprime documento na nova janela

Page 206: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

206

Formulários

O objeto Form é o mais alto da hierarquia dos componentes de formulários. Através dele se tem acesso aos componentes existentes dentro de um bloco HTML <form>, que podem ser botões, caixas de texto, caixas de seleção, etc.

Page 207: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

207

Tipos de campo

Objeto Descrição e tipo de dados

Campo de Texto Entrada de dados com texto e números.

SenhaCampo de texto do tipo Senha não exibem os caracteres digitados,

apenas asteriscos.

BotãoBotões que executam determinadas funções, como enviar os dados do

formulário ou apagar os dados.

Caixa de seleção Permite escolher uma única opção entre um grupo de diferentes opções.

Botão de opções Cria um menu ou uma lista com várias opções a serem escolhidas.

Menu ou listas Cria um menu ou uma lista com várias opções a serem escolhidas.

Campos de arquivoInsere uma caixa de texto com um botão de seleção que permite

escolher um arquivo no sistema.

Campos de imagemDefine um campo de imagem que pode ser usado com o botão de envio

do formulário.

Page 208: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

208

Tipos de campo (cont.)

Text - Definido com o TYPE= TEXT.

<FORM>Nome:<input type=text name=nome><BR><input type=button value='Envia' onClick='document.forms[0].submit()'></FORM>

Page 209: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

209

Tipos de campo (cont.)

Password - Definido com o TYPE= PASSWORD.

<FORM>Nome:<input type=password name=senha><BR><input type=button value='Envia' onClick='document.forms[0].submit()'></FORM>

Page 210: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

210

Tipos de campo (cont.)

Checkbox - Definido com o TYPE= CHECKBOX.

<FORM>Interesses:<BR><input type=checkbox name=lotus value='x'>Lotus<BR><input type=checkbox name=websp value='x'>Websphere<BR><input type=checkbox name=db2 value='x'>DB2<BR><input type=button value='Envia' onClick='document.forms[0].submit()'></FORM>

Page 211: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

211

Tipos de campo (cont.)

Radio - Definido com o TYPE= RADIO.

<FORM>Gostando do curso?<BR><input type=radio name=s value=‘s‘>checked>SIM =) <BR /><input type=radio name=s value=‘n'>N&atilde;o!!! <BR /><input type=button value='Envia' onClick='document.forms[0].submit()'></FORM>

Page 212: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

212

Tipos de campo (cont.)

Select - Definido com <SELECT> seguido de tags <OPTION>.

<FORM>Escolha um Produto:<BR><SELECT> <OPTION value='1'> Lotus <OPTION value='2'> Notes <OPTION value='3'> Domino</SELECT></SELECT></FORM>

Page 213: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

213

Tipos de campo (cont.)

Textarea - Definido com a tag <TEXTAREA> seguido do texto que será inicializado na caixa:

<FORM><TEXTAREA NAME=OBS ROWS=3 COLS=30>grange.com.br</TEXTAREA><input type=button value='Envia' onClick='document.forms[0].submit()'></FORM>

Page 214: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

214

Formulários no Notes

Text Document

Page 215: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

215

Form

Os componentes de formulário são os objetos HTML mais utilizados em JS.

Esses componentes são objetos como botões, caixas de seleção, caixas de texto e botões de “rádio”.

Não é possível criar um objeto Form em JS. Ele precisa existir no código HTML da página através de um bloco <form> ... </form>

Um documento pode ter vários formulários. A propriedade document, portanto, possui um vetor com

referências a todos os formulários do documento, na ordem em que eles aparecem no código.

Page 216: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

216

Form (cont.)

A sintaxe do objeto Form em HTML está mostrada abaixo.

<FORM NAME="nome_do_formulario (usado por JavaScript)" ACTION="url para onde será enviado o formulário" METHOD="método HTTP (pode ser GET ou POST)" ENCTYPE="formato de codificação" TARGET="janela alvo de exibição da resposta do formulário" ONRESET="código JavaScript" ONSUBMIT="código JavaScript" > ... corpo do formulário ...</FORM>

Page 217: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

217

Form (cont.)

Métodos:

Método Ação

reset() Reinicializa o formulário

submit() Envia o formulário

focus() Seleciona o formulário

blur() Tira a seleção do formulário

Page 218: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

218

Form (cont.)

Propriedade Descrição

elements Array. Vetor de elementos do formulário (read-only).

elements.length Number. Número de elementos do formulário (read-only).

name String. Contém o valor do atributo HTML NAME (read-only).

action String. Contém o valor do atributo HTML ACTION.

encoding String. Contém o valor do atributo HTML ENCTYPE.

method String. Contém o valor do atributo HTML METHOD.

target String. Contém o valor do atributo HTML TARGET.

Page 219: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

219

Form (cont.)

<form name="f1"> <input type=text name="campoTexto"> <input type=button name="botao"></form>

//podem ser acessados usando o vetor elements da forma:txt = document.f1.elements[0]; // 1o elemento (Text)bot = document.f1.elements[1]; // 2o elemento (Button)

//ou usando o seu nome, como propriedade de Form:txt = document.f1.campoTexto; // primeiro elemento bot = document.f1.botao; // segundo elemento

Page 220: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

220

Form (cont.)

Eventos:

ONSUBMIT - antes de enviar o formulário ao servidor ONRESET - antes de inicializar o formulário com os valores

default

Page 221: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

221

Objetos Button, Reset e Submit

Button, Reset e Submit são todos botões criados em HTML. Têm a mesma aparência na tela, porém efeitos diferentes quando

apertados.

<INPUT TYPE="button" NAME="nome_do_botão" VALUE="rótulo do botão" ONCLICK="Código JavaScript" ONFOCUS="Código JavaScript" ONBLUR="Código JavaScript">

Page 222: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

222

Objetos Button, Reset e Submit

Propriedade Descrição

form Form. Referência ao formulário que contém este botão.

value String. Contém o valor do atributo HTML VALUE que especifica o texto que aparece no botão. Pode ser lida ou alterada.

name String. Contém o valor do atributo HTML NAME. (read-only)

type String. Contém o valor do atributo HTML TYPE. (read-only)

Método Ação

click() Realiza as tarefas programadas para o clique do botão (executa o código JavaScript contido no atributo ONCLICK sem que o botão precise ser apertado).

focus() Ativa o botão.

blur() Desativa o botão.

Page 223: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

223

Objetos Password, Text e Textarea

Os objetos do tipo Password, Text e Textarea são usados para entrada de texto.

<INPUT TYPE="text" NAME="nome_do_campo_de_texto" VALUE="texto inicial do campo de textos" SIZE="número de caracteres visíveis" MAXLENGTH="número máximo de caracteres permitido" ONBLUR="código JavaScript" ONFOCUS="código JavaScript" ONCHANGE="código JavaScript" ONSELECT="código JavaScript" >

Page 224: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

224

Objetos Password, Text e Textarea (cont.)

<INPUT TYPE="password" ... >

<TEXTAREA ROWS="número de linhas visíveis" COLS="número de colunas visíveis" NAME="nome_do_campo_de_texto" ONBLUR="handlerText" ONFOCUS="handlerText" ONCHANGE="handlerText" ONSELECT="handlerText" > Texto inicial </TEXTAREA>

Page 225: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

225

Objetos Password, Text e Textarea (cont.)

Propriedade Descrição

form Form. Referência ao formulário no qual este elemento está contido.

type String. Valor do atributo TYPE do HTML.

name String. Valor do atributo NAME do HTML.

defaultValue String. Valor default previamente definido no campo VALUE do HTML.

value String. Conteúdo do campo de texto. Valor que pode ser redefinido.

Método Ação

focus() Ativa o componente.

blur() Desativa o componente.

select() Seleciona o campo editável do componente (faz o cursor aparecer piscando dentro do campo de texto ou seleciona o texto nele contido).

Page 226: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

226

Objeto Checkbox e Radio

Os objetos Checkbox e Radio representam dispositivos de entrada booleanos cuja informação relevante consiste em saber se uma opção foi selecionada ou não.

As únicas diferenças entre os objetos Checkbox e Radio são a sua aparência na tela do browser e a quantidade de opções que podem conter para cada grupo de dispositivos.

<INPUT TYPE="radio/checkbox" NAME="nome_do_componente" VALUE="valor (o valor que será enviado ao servidor)" CHECKED <!-- previamente marcado --> ONBLUR="código JavaScript" ONFOCUS="código JavaScript" ONCLICK="código JavaScript" > Rótulo do componente

Page 227: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

227

Objeto Checkbox e Radio (cont.)

Um grupo não é tratado como um elemento de formulário, mas os nomes dos grupos são referências do tipo Array.

fem = document.forms[0].elements[4];fem = document.forms[0].sexo[1];

Page 228: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

228

Objeto Checkbox e Radio (cont.)

Propriedade Read/Write Descrição

form r Form. Referência ao formulário.

type r String. Conteúdo do atributo HTML TYPE (read-only).

name r String. Conteúdo do atributo HTML NAME (read-only).

defaultChecked r Boolean. Retorna true se o elemento HTML que representa o objeto contém o atributo CHECKED.

checked r / w Boolean. Retorna true se um Checkbox ou Radio está atualmente ligado. O valor desta propriedade pode ser alterado dinamicamente em JavaScript para ligar ou desligar os componentes.

value r / w String. Conteúdo do atributo HTML VALUE. O valor desta propriedade pode ser alterado dinamicamente.

length r Number. Comprimento do vetor de objetos Radio ou Checkbox. Aplica-se apenas a grupos de elementos identificados pelo nome (não pode ser usado no vetor elements, que refere-se a objetos individuais). Ex:

document.forms[0].nomegrupo.length

Page 229: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

229

Objeto Checkbox e Radio (cont.)

Exemplo:

opcao = null;turnoArray = document.forms[0].turno; // vetor de botoes de radiofor (i = 0; i < turnoArray.length; i++) { if (turnoArray[i].checked) { opcao = turnoArray[i]; }}

if (opcao == null) { alert("É preciso escolher Manhã, Tarde ou Noite!");}

Page 230: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

230

Objetos Select e Option

Um objeto Select pode ter uma ou mais objetos Option, que refletem elementos <OPTION>

<SELECT NAME="nome_do_componente" SIZE="número de opções visíveis" MULTIPLE <!-- Suporta seleção múltipla --> ONBLUR="código JavaScript" ONCHANGE="código JavaScript" ONFOCUS="código JavaScript" > <OPTION ...> Opção 1 </OPTION> ... <OPTION ...> Opção n </OPTION></SELECT>

<OPTION VALUE="Valor da opção" SELECTED > Texto descrevendo a opção</OPTION>

Page 231: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

231

Objetos Select e Option (cont.)

Propriedade Read/Write Descrição

name r String. Equilavente ao atributo HTML NAME.

form r String. Referência ao formulário que contém este objeto.

type r String. Informa o tipo de lista: select-one, se o elemento HTML não tiver o atributo MULTIPLE, ou select-multiple, se tiver.

options r Array. Vetor de objetos Option contidos no objeto Select.

length r Number. Número de objetos do vetor options.

selectedIndex r/w Number. Índice da opção atualmente selecionada. Para listas múltiplas, contém o primeiro índice selecionado.

options.length r Number. Mesmo que length.

options.selectedIndex r/w Number. Mesma coisa que selectedIndex.

Page 232: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

232

Objetos Select e Option (cont.)

Propriedade Read/Write Descrição

index r Number. Contém o índice desta opção dentro do vetor options do objeto Select ao qual pertence.

defaultSelected r Boolean. Retorna true se o elemento HTML que representa o objeto contém o atributo SELECTED.

selected r/w Boolean. Retorna true se objeto está selecionado. Pode ser alterado para selecionar ou deselecionar o objeto dinamicamente.

value r/w String. Contém o conteúdo do atributo HTML VALUE (que contém os dados que serão enviados ao servidor).

text r/w String. O texto dentro de <option>...</option>, que aparece na lista de opções. Pode ser alterado. Este texto não será enviado ao servidor se existir um atributo VALUE.

Page 233: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

233

Objetos Select e Option (cont.)

Em outros casos, informações relevantes precisam ser recuperadas do objeto Option atualmente selecionado.

Se o Select não permite seleção múltipla, o número armazenado na propriedade selectedIndex pode ser usado para recuperar o objeto correspondente no vetor options, e a partir daí obter os dados que estão na propriedade value ou text.

// obtenção do índice atualmente selecionadoindice = form.umdia.selectedIndex;// valor enviado ao servidor: D, S, T, etc.valorUtil = form.umdia.options[indice].value;// valor mostrado na lista de opções: Domingo, Seg, etc.valorVisivel = form.umdia.options[indice].text;

Page 234: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

234

Objetos Select e Option (cont.)

É possível acrescentar e remover opções de uma lista Select criando e removendo objetos Option.

Para criar um novo objeto Option, usa-se o construtor Option() 1 Depois, pode-se definir valores de interesse, através das

propriedades text, value e selected (2). Finalmente, cada objeto Option precisa ser colocado na lista,

ocupando o final do vetor options (3).

function mais() { selObj = f.horario; novaOp = new Option(); // 1 (legenda acima) novaOp.text = "Intervalo 0" +(selObj.length + 1); // 2 selObj.options[selObj.length] = novaOp; // 3 }

Page 235: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

235

Objetos Select e Option (cont.)

Para remover uma opção de uma lista, basta encurtar o vetor options.

function menos(f) { selObj = f.horario; if (selObj.length > 0) { len = selObj.length - 1; selObj.length = len; // length = length - 1 }}

Page 236: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

236

Objeto File

File (ou FileUpload) representa um dispositivo de entrada que permite o envio de um arquivo no cliente ao servidor.

Na tela do browser, aparece como uma caixa de texto e um botão com o rótulo “Browse...” ou “Procurar...”

Pode-se digitar o caminho absoluto ao arquivo que se deseja enviar ao servidor na caixa de texto ou clicar no botão “Browse...”

Page 237: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

237

Objeto File (cont.)

O objeto File é criado em HTML através de um elemento <INPUT>. A sintaxe geral do componente está mostrada abaixo:

<INPUT TYPE="file" NAME="nome_do_componente" ONBLUR="código JavaScript" ONFOCUS="código JavaScript" ONCHANGE="código JavaScript" >

Page 238: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

238

Objeto File (cont.)

Propriedade Descrição

form Form. Referência ao formulário que contém este componente.

name String. Contém o valor do atributo HTML NAME. (read-only)

type String. Contém o valor do atributo HTML TYPE. (read-only)

value String. Contém o texto no campo de textos do objeto, que corresponde ao arquivo a ser enviado ao servidor. É read-only por questões de segurança.

Método Ação

focus() Ativa o botão.

blur() Desativa o botão.

Page 239: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

239

Validando um formulário

Uma das principais aplicações de JS é na validação de campos.

function validaCampos() { if (document.forms[0].nome.value == "") { alert('Entre um valor para nome.'); document.forms[0].nome.focus(); return false; }}...

onsubmit return validaCampos() //pode ser do Designer

Page 240: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

240

Validando um formulário (cont.)

Page 241: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

241

AJAX

O que é AJAX?!?

AJAX é uma sigla para Asynchronous JavaScript and XML. Ele é implementado através do objeto XMLHttpRequest. O AJAX trouxe a internet para a sua versão 2.0.

Page 242: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

242

AJAX (cont.)

Com o AJAX é possível fazer interações com o usuário sem ter que recarregar a página, trazendo informações em back-end, tratando-as e exibindo-as.

Page 243: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

243

O objeto XMLHttpRequest

O objeto XMLHttpRequest é o coração do AJAX. A Microsoft implementou o objeto XMLHttpRequest no Internet

Explorer 5 para Windows como um objeto ActiveX. Engenheiros do projeto Mozilla implementaram uma versão nativa

compatível no Mozilla 1.0.

Ele simplesmente faz uma chamada HTTP a um recurso de uma URL, e traz seus resultados de forma assíncrona ao código.

A seguir, veremos um exemplo deste objeto para uma aplicação da formula @DBColumn, trazendo os resultados em back-end.

Page 244: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

244

O objeto XMLHttpRequest (cont.)

function dbColumn(strViewPath) { strUrl= strViewPath + "?ReadViewEntries&Count=999"; if (window.XMLHttpRequest) { //Mozilla, Netscape xmlHttp= new XMLHttpRequest(); try { xmlHttp.overrideMimeType('text/xml'); //Opera } catch(e) {} xmlHttp.onreadystatechange= processReqChange; xmlHttp.open("GET", strUrl , true); xmlHttp.send(null); } else { //IE if (window.ActiveXObject) { xmlHttp= new ActiveXObject("Microsoft.XMLHTTP"); if (xmlHttp) { xmlHttp.onreadystatechange= processReqChange; xmlHttp.open("GET", strUrl , true); xmlHttp.send(); } } }}

Page 245: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

245

O objeto XMLHttpRequest (cont.)

function processReqChange() { if (xmlHttp.readyState == 4) { // 4= load complete if (xmlHttp.status == 200) { // HTTP OK objResponse= xmlHttp.responseXML.documentElement; arrNodes= objResponse.getElementsByTagName("viewentry"); var strResult= ""; for(var i=0; i<arrNodes.length; i++) { try{ strResult = strResult + strSeparator + arrNodes[i].getElementsByTagName("text")[0].childNodes[0].nodeValue; } catch(e) { break; } } executeSomething(strResult.split(strSeparator)); } else { alert("Error loading XML: n " + xmlHttp.statusText); } } }

Page 246: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

246

Microsoft Script Debugger

http://www.microsoft.com/downloads/details.aspx?FamilyID=2f465be0-94fd-4569-b3c4-dffdf19ccd99&displaylang=en

Page 247: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

247

Firebug

https://addons.mozilla.org/firefox/1843/

Page 248: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

248

Referência

http://www.w3.org/

http://www.mozilla.org/js/

http://msdn.microsoft.com/

http://www.w3schools.com/js/

Page 249: Minicurso de JavaScript (Portuguese)

Mini-curso de JavaScript

249

Dúvidas

Dúvidas?