103
Ultima actualização: 18-10-2011 Técnico de Multimédia Nível IV EFJ - TIPO 7 JAVASCRIPT FORMADOR: JOSÉ BATISTA

Javascript tutorial

Embed Size (px)

DESCRIPTION

Técnicos Multimédia

Citation preview

Page 1: Javascript tutorial

Ultima actualização: 18-10-2011

Técnico de Multimédia – Nível IV

EFJ - TIPO 7

JAVASCRIPT

FORMADOR: JOSÉ BATISTA

Page 2: Javascript tutorial

Ultima actualização: 18-10-2011

Papel do JavaScript na Internet:

Linguagem de programação JavaScript:

• Desenvolvida pela Netscape para uso nos seus browsers

• Objectivo: tornar as páginas Web (documentos) mais dinâmicos e

interactivos.

• Alterar o conteúdo de um documento, permitir formulários e opções de

controlo, animação, etc.

Linguagem de scripting

Orientada ao objecto.

Interpretada pelo browser.

Os scripts são executados sem serem compilados.

Os scripts ocupam pouco espaço (poucos kbit).

Linguagem mais popular na Internet.

Utilizado na forma de scripts embebidos no código HTML ou em ficheiros com

a extensão .js

JavaScript é suportado pelos browsers mais famosos, como o Netscape, o

Internet Explorer , Firefox, chrome e o Opera.

Page 3: Javascript tutorial

Ultima actualização: 18-10-2011

O que é que o JavaScript pode fazer ?

Geração de HTML de forma dinâmica:

• Inserção de texto, imagens e elementos num página.

Reacção a eventos:

• Quando ocorre um evento, código JavaScript pode ser executado.

O JavaScript pode ler e escrever elementos HTML:

• Consulta e mudança de atributos de um elemento:

Imagens, links, forms, texto, etc.

Validação de campos nos formulários:

• Pode ser útil para validar os dados antes de estes serem submetidos

ao servidor.

• Poupa trabalho no servidor !!!!

• Minimiza o tráfego !!!

Page 4: Javascript tutorial

Ultima actualização: 18-10-2011

Vantagens:

Fácil de aprender.

Desenvolvimento rápido.

Independente da plataforma.

Peso relativamente pequeno.

Desvantagens:

Gama limitada de métodos incorporados.

Não se pode esconder o código.

Faltam ferramentas de desenvolvimento.

Instável, compatibilidade ?

Page 5: Javascript tutorial

Ultima actualização: 18-10-2011

Existem três formas de incluir JavaScript em páginas HTML:

1. Associando código a atributos designadores de handlers de eventos

1. Como conteúdo do elemento script.

1. Especificando um ficheiro de código através do atributo src do elemento script. Esta

solução é vantajosa quando pretende usar o mesmo código em vários documentos

HTML.

Neste caso,qualquer código dentro do elemento script é ignorado!

O atributo src pode especificar qualquer URL, relativo ou absoluto

Incluir código JavaScript em páginas HTML

<script type="text/javascript" >

alert("Executando o código");

</script>

<script src="common.js"> </script>

Ex: <SCRIPT SRC="http://home.netscape.com/functions/jsfuncs.js">

<input type="button" value="clickMe" onClick=‘alert("thanks to click me!");’ />

Page 6: Javascript tutorial

Ultima actualização: 18-10-2011

O primeiro programa em JavaScript

<HTML>

<HEAD>

<TITLE> O meu primeiro programa em JavaScript </TITLE>

<script type="text/javascript" >

alert("Hello World!");

</script>

</HEAD>

<BODY>

</BODY>

</HTML>

Page 7: Javascript tutorial

Ultima actualização: 18-10-2011

Comentários

Valores,Variáveis

Expressões e Operadores

Funções

Instruções

Arrays

Eventos

Objectos

Conceitos nucleares

Page 8: Javascript tutorial

Ultima actualização: 18-10-2011

Comentários

Comentários são anotações que servem para clarificar certos aspectos do

código ou explicar determinadas opções. Os comentários são ignorados

pelo interpretador de JavaScript.

O JavaScript suporta dois estilos de comentários:

de uma só linha

• // This is a single-line comment.

com múltiplas linhas

• /* This is a multiple-line comment. It can be of any length, and

you can put whatever you want here. */

Page 9: Javascript tutorial

Ultima actualização: 18-10-2011

Variáveis permitem identificar valores (valores primitivos, arrays ou objectos) através de um nome. O valor diz-se o conteúdo da variável.

Declaração de variáveis

Exemplos

Em JavaScript as variáveis não têm tipo (isto é, um conjunto de valores possíveis) definido a priori. Assim, qualquer variável pode conter qualquer valor.

Exemplo

• var notInicialized; // a variável fica com o valor undefined

• var euro=200.482;

• var codigo_postal="1900 LISBOA";

• var var1=2, var2=3, var3;

Variáveis

codigo_postal=1900; // A variável foi iniciada com uma string e agora

// passou a ter como conteúdo um valor numérico!

var nome_variável [ = expressão_iniciação ] [, ... ] ;

Os parêntesis rectos indicam que a

expressão é opcional. Na sua

inexistência a variável fica com o valor

undefined

Page 10: Javascript tutorial

Ultima actualização: 18-10-2011

Os identificadores em JavaScript têm de respeitar as seguintes regras:

Começar por uma letra ou o carácter ´_´

Os caracteres seguintes podem ser qualquer combinação de letras, ‘_’ e dígitos.

Distinguem-se letras minúsculas e maiúsculas.

Exemplos

var _window2 = window.open();

var name = "joão";

name e Name são variáveis diferentes!

var Name = "Carlos";

var 3values = [ 1, 2, 3]; // nome de variável inválido (começa por um dígito)

Regras para os identificadores (nomes de variáveis e funções)

Page 11: Javascript tutorial

Ultima actualização: 18-10-2011

O JavaScript permite trabalhar com os seguintes valores primitivos:

Valores númericos (inteiros e reais)

• Exs: 42 3.1415 50.0 NaN (lê-se not a number e é o resultado de uma expressão com um

operando que não pode ser convertido em valor numérico)

Valores lógicos (booleanos).

• true e false

Cadeias de caracteres (strings)

• Ex: "Isto é uma string!"

undefined representa o conteúdo de variáveis não iniciadas

null representa o não valor, ou seja a inexistência de valor associado a uma

variável

Ex: varA= null; // varA passou a não ter valor, ou melhor,

// passou a valer null!

Valores Primitivos

Page 12: Javascript tutorial

Ultima actualização: 18-10-2011

Expressões e Operadores

Expressões são quaisquer sequências válidas de operadores e operandos (lvariáveis e subexpressões - expressões parentesiadas) que, depois de avaliadas, geram um

valor primitivo (número, string, valor lógico), ou um objecto.

Na linguagem JavaScript existem expressões:

Aritméticas: a avaliação dá um número (Ex: 2/4 0.5 )

String: a avaliação dá uma string (Ex: "Fred" +1 "Fred1")

Lógicas: a avaliação dá um valor lógico (Ex: 3 > 4 false)

Especiais: têm operadores especiais que, por exemplo, podem retornar (ou gerar) objectos

Page 13: Javascript tutorial

Ultima actualização: 18-10-2011

Existem operadores unários (só com um operando), binários (com 2

operandos), e um operador ternário (com três operandos)

O JavaScript tem os seguintes operadores:

Operadores

Aritméticos

(de) Strings

Afectação

Comparação

Lógicos (booleanos)

Operadores

A prioridade relativa dos operadores está definida no slide

tabela de operadores eprecedências

Page 14: Javascript tutorial

Ultima actualização: 18-10-2011

Operadores aritméticos

+ soma - subtracção * multiplicação / divisão

Comportam-se como os seus equivalentes matemáticos. Ex: 1 / 2 retorna 0.5

% módulo retorna o resto da divisão inteira entre dois operandos . Os operandos são convertidos para valores inteiros Ex: 12 % 5 retorna 2

Operadores aritméticos operam sobre valores numéricos (literal ou variável) e retornam um valor numérico.

Os 4 operadores básicos:

Os operadores incremento

e decremento

O operador Módulo

var1++ var1 --

incrementam ou decrementam var1. Retornam o valor original de var1

++ var1 -- var1

incremento ou decremento de var1. retornam o valor após a operação

Menos Unário - Menos unário

Nega o operando que o segue Ex: y = -x (se x=3, y=-3)

Operandos não numéricos são convertidos em números usando as regras definidas em Number, com excepção das

situações indicadas em operadores de String

Page 15: Javascript tutorial

Ultima actualização: 18-10-2011

Operadores de Strings

Se pelo menos um dos operandos do operador + for uma string, aquele

passa a funcionar como operador de concatenação , retornando outra

string, concatenação léxica dos dois operandos

"my " + "string" retorna "my string".

23 + "a" retorna "23a"

var a = "2"; var val = a + 3; // o valor de val é a string "23"

O facto dos operador + ter comportamento diferente em strings e

números pode gerar confusão.

Para converter explícitamente uma string (ou outro valor) em número

pode fazer: var num = Number(valor); // num=Number("23") num = 23

Page 16: Javascript tutorial

Ultima actualização: 18-10-2011

Operadores de afectação

Um operador de afectação afecta o

operando à esquerda com o valor do

operando à direita e retorna o valor com que

ficou o operando afectado.

Ex: a+= 3 a = a+ 3

retorna 7 se a valer 4

Operador Equivalência

x += y x = x + y

x -= y x = x - y

x *= y x = x * y

x /= y x = x / y

x %= y x = x % y

x ^= y x = x ^ y

Page 17: Javascript tutorial

Ultima actualização: 18-10-2011

Operadores de comparação II

Operador Descrição Examplos que retornam true

IGUAL == Retorna true se os dois operandos forem iguais de acordo com as

regras acima. Se os dois operados não forem do mesmo tipo, é feita

uma conversão de tipos conveniente (típicamente os operandos são

convertidos em string)

3 == var1

s1 == ’a"

DIFERENTE != Retorna true se os dois operandos forem diferentes, de acordo com

as regras acima. Se os dois operados não forem do mesmo tipo, é

feita uma conversão de tipos conveniente (típicamente os operandos

são convertidos em string)

var1 != 4

s2 != "B"

MAIOR QUE > true se o operando esquerdo for maior que o direito. var2 > var1

MAIOR OU IGUAL >= true se o operando esquerdo for maior ou igual que o direito. var2 >= var1

var1 >= 3

MENOR QUE < true se o operando esquerdo for menor que o direito. var1 < var2

MENOR OU IGUAL <= true se o operando esquerdo for menor ou igual que o direito.

var1 <= var2

s1 <= s2

Assumindo var1=3

var2=4

s1="a"

s2="b"

Page 18: Javascript tutorial

Ultima actualização: 18-10-2011

Operadores lógicos (booleanos)

Operadores Lógicos são normalmente usados com valores booleanos. Nesse caso geram valores booleanos.

Os operadores && e || podem ter como operandos valores não booleanos e nesse caso retornam um dos

operandos

Em geral, qualquer valor não booleano é convertível para true, à excepção de 0, a string vazia (""), null e

undefined, que são convertíveis para false.

As expressões lógicas são avaliadas o mínimo necessário para obter o resultado, de acordo com as regras:

exp1 && exp2 é imediatamente avaliada para exp1 (se Boolean(exp1)== false), sem necessidade de avaliar exp2

exp1 || exp2 é imediatamente avaliada para exp1 (se Boolean(exp1) == true), sem necessidade de avaliar exp2

Operador Uso Descrição

&& exp1 && exp2

(Logical AND)

Retorna exp1 se este poder ser convertido para false. Caso contrário,

retorna exp2. Na situação normal de exp1 e exp2 serem expressões

booleanas, retorna true se ambas forem true

|| exp1 || exp2

(Logical OR)

Retorna exp1 se este poder ser convertido para true. Caso contrário,

retorna exp2. Na situação normal de exp1 e exp2 serem expressões

booleanas, retorna true se pelo menos uma for true

! ! exp

(Logical NOT)

Retorna false se exp poder ser convertido para true. Caso contrário

retorna true

Page 19: Javascript tutorial

Ultima actualização: 18-10-2011

Tabela de operadores e precedências

Prioridade

+

_

Operador Descrição

. [] () Accesso a propriedades, índexação, chamadas a funções e sub-

expressões

++ — - ~ ! new Operadores unários e criação de objectos

* / % Multiplication, division, modulo division

+ - Addition, subtraction, string concatenation

< <= > >= Less than, less than or equal, greater than, greater than or equal,

== != Equality, inequality,

&& Logical AND

|| Logical OR

Page 20: Javascript tutorial

Ultima actualização: 18-10-2011

As funções em JavaScript são semelhantes às suas congéneres na matemática. Têm um nome e, em geral, têm argumentos e geram um valor. No entanto, ao contrário daquelas, podem não ter argumentos e/ou não gerar ( retornar) um valor. De qualquer modo, podem sempre alterar o estado do programa através de efeitos laterais (side-effets), por exemplo, modificando o valor de variáveis globais.

As variáveis declaradas dentro de uma função, ao contrário das variáveis globais, só podem ser acedidas dentro da função onde são declaradas.

A definição de uma função consiste na palavra-chave function, seguida pelo seu nome, uma lista

de argumentos - dentro de parêntesis e separados por vírgulas - e as respectivas instruções, dentro de chavetas.

Exemplo - O quadrado de um número

function nome_de_função ( parametro1, parametro2, ... ) {

declarações de variáveis e instruções...

}

Funções (definição)

function square( x) {

return x * x;

}

Page 21: Javascript tutorial

Ultima actualização: 18-10-2011

Funções (invocação)

Uma função só é executada quando invocada. A sua definição não implica a

execução de qualquer código.

Exemplo: a função square definida no slide anterior, poderia ser invocada com o

argumento 5, da seguinte maneira:

• var i = square(5);

Uma função é invocada colocando o seu nome, seguido dos argumentos de

invocação entre parêntesis. A chamada da função pode ser feita em qualquer

ponto do programa onde possa aparecer uma expressão

• var i = square(5) ; // i vale ?....

Page 22: Javascript tutorial

Ultima actualização: 18-10-2011

Entrada/saída de dados (a função alert)

Quando se utiliza o JavaScript em páginas HTML, existem funções pré-definidas que

permitem a interacção simples com o utilizador

Para mostrar informação pode-se usar a função alert

Uso alert( mensagem)

Parâmetros mensagem – String com a mensagem a afixar

Retorno A função não retorna nada

alert("Ganhou!");

Page 23: Javascript tutorial

Ultima actualização: 18-10-2011

Entrada/saída de dados ( a função prompt)

Para recolhar dados pode-se usar a função prompt

Uso var stringLida = prompt( mensagem, valorInicial );

Parâmetros mensagem (opcional). String que especifica a mensagem a mostrar na dialogBox de recolha do

valor. Por omissao é ‘’’’.

valorInicial (opcional). String que especifica o valor inicial a ser colocado no campo de recolha. Por

omissao é "".

var idade = prompt("Quantos anos tem?", "");

Page 24: Javascript tutorial

Ultima actualização: 18-10-2011

Entrada/saída de dados ( a função confirm)

No caso particular da recolha de um valor booleano, é útil usar a função confirm

Uso var res=confirm(mensagem);

Parâmetros mensagem – string com a mensagem a afixar

Retorno se o utilizador premiu OK res é true. Se o utilizador premiu Cancel res é false.

var answer =confirm("Continuar a execução?");

if (answer == true) {

... // É para continuar!

}

else {

... //É para Cancelar!

}

Page 25: Javascript tutorial

Ultima actualização: 18-10-2011

strings

• Uma string consiste em 0 ou mais caracteres delimitados

por plicas ‘ ou aspas ". Os delimitadores têm de ser do

mesmo tipo- ambos aspas ou ambos plicas. Exemplos:

"blah"

‟blah‟

"1234"

"one line \n another line"

• A um valor do tipo string podem ser aplicados as

propriedades e métodos dos objectos String

• Exemplos:

var s="abc";

alert(s.length); // 3

Caracteres especiais que se

podem incluír dentro de strings

Caracteres Meaning

\b Backspace

\f Form feed

\n New line

\r Carriage return

\t Tab

\’ Apostrophe or single quote

\" Double quote

\\ Backslash character (\)

\XXX The character with the Latin-1

encoding specified by up to three

octal digits XXX between 0 and 377.

For example, \251 is the octal

sequence for © (copyright) symbol.

\xXX The character with the Latin-1

encoding specified by the two

hexadecimal digits XX between 00

and FF. For example, \xA9 is the

hexadecimal sequence © (copyright)

symbol.

\uXXXX The Unicode character specified by

the four hexadecimal digitsXXXX. For

example, \u00A9 is the Unicode

sequence for © (copyright) symbol.

Page 26: Javascript tutorial

Ultima actualização: 18-10-2011

array é uma sequência de valores (elementos). Um array de strings é uma sequência de zero ou mais

expressões dentro de parêntesis rectos

A variável diasDaSemana passa a ser uma referência para o array de comprimento 7 (isto é, com sete

elementos). O comprimento de um array pode ser obtido através da propriedade length.

Os elementos de um array são acedidos através do seu índice (posição) . O primeiro elemento ocupa o

índice 0, o último ocupa o índice length-1.

Ex: diasDaSemana[2] acede ao terceiro elemento do array (a string "terça").

Um array pode ser criado pela forma alternativa new Array(size) em que size indica o número de

elementos do array. Nesse caso todos os elementos ficam iniciados a null

Ex: var tab=new Array(5); // tab fica a referenciar um array de 5 elementos, todos com o valor null

Arrays

var dias="";

for (var i=0; i < diasDaSemana.length; ++i)

dias += diasDaSemana[i] + "\n";

alert(dias);

alert("Numero de dias da semana= " + diasDaSemana.length);

var diasDaSemana= [ "domingo","segunda","terça", "quarta","quinta","sexta","sábado" ];

Page 27: Javascript tutorial

Ultima actualização: 18-10-2011

• As expressões são instruções quando terminadas por ;

• É possível usar mais que uma instrução sempre que aparecer a palavra instrução nas descrições

dos slides seguintes, usando a instrução composta:

instrução composta { instruções ... }

A linguagem JavaScript tem um conjunto compacto mas completo de instruções. Nesta secção são apresentadas as instruções do JavaScript, separadas do seguinte modo:

As instruções de manipulação de objectos (a instrução for..in e a instrução with) e as

instruções de tratamento de excepções (instruções try...catch e throw) serão analisadas mais tarde

Notas:

• Instruções condicionais: a instrução if ... else e a instrução switch

• Instruções de ciclo: as instruções while, for, do while e continue

• Instrução return

• Instrução break: usada na instrução switch e em casos excepcionais associada a ciclos

• Instrução expressão

• Instrução composta

Instruções

Page 28: Javascript tutorial

Ultima actualização: 18-10-2011

• A parte das instruções que aparece dentro dos parêntesis rectos é opcional

• Se for necessário colocar mais que uma instrução nos ramos da instrução if

pode-se usar a instrução composta { instruções ... }

Instrução if

function maiorDeTres( val1,val2,val3)

{

if (val1 > val2)

{

if (val1 > val3)

return val1;

else

return val3;

}

else

{

if (val2 > val3)

return val2;

else

return val3;

}

}

if ( condição) instrução [ else instrução ]

A utilização da instrução

composta não é necessária

neste exemplo, mas torna o

código mais legível

Page 29: Javascript tutorial

Ultima actualização: 18-10-2011

A instrução switch

switch (expression) {

case label1:

case label2:

instruções [ break; ]

case label3:

instruções[ break; ]

...

default :

instruções;

} var d = new Date(); // devolve um objecto com a data corrente

switch( d.getDay()) {

case 1: case 2: // segunda e terça-feiras

alert("um início de semana com muita energia!");

break;

case 3: // quarta

alert("anime! Deve ter um joguito de futebol na televisão");

break;

case 4: case 5: // quinta, sexta

alert("O fim de semana está quase...");

break;

case 6: case 0: // sábado, domingo

alert("Com saudades do trabalho?...");

break;

default:

// nunca pode acontecer (se o getDay não tiver erros...)

alert("Mas que raio? Em que dia da semana é que estamos?");

}

A instrução switch, quando todos os

seus ramos terminam pela instrução

break, é semelhante a uma cadeia de

instruções if -- else if -- else

Page 30: Javascript tutorial

Ultima actualização: 18-10-2011

*A instrução switch (II)

var teste = prompt("digite um valor de 1 até 5");

switch(teste){

case '1':

alert('seu valor foi 1');

case '2':

alert('seu valor foi 2');

case '3':

alert('seu valor foi 3');

case '4':

alert('seu valor foi 4');

case '5':

alert('seu valor foi 5');

default:

alert('seu valor nao foi nenhum valor entre 1 e 5');

}

Se algum ou alguns ramos da instrução

swaitch não terminam por break, todas as

intruções do switch a partir do ramo inicial

são executadas, o que pode ter resultados

interessantes

Page 31: Javascript tutorial

Ultima actualização: 18-10-2011

A instrução while

Executa instrução enquanto condição for verdadeira. A instrução é

executada zero ou mais vezes.

Exemplos

var n=0; var x=0; while( n < 10 ) { n ++; x += n; }

while ( condição) instrução

var i=1;

while(i <= 10)

{

document.write(i++ +’<br>’); //escrevendo e ao mesmo tempo adicionando um para a variável i }

O comando while é semelhante ao comando for, porém na maioria das vezes o while é aplicado quando

não podemos determinar a quantidade de voltas que nosso ciclo vai ter

Obter a soma dos 10 primeiros inteiros

Page 32: Javascript tutorial

Ultima actualização: 18-10-2011

for ( [ expressaoInicial] ; [ condição] ; [ expressaoFimCiclo] ) instrução

A instrução for

Descrição

Executa instrução enquanto a avaliação de condição der true

Avalia expressaoInicial antes da primeira avaliação de condição e expressaoFimCiclo no final de

cada ciclo

var notas0a20 = new Array(5,12,16);

function quantasPositivas(notas0a20) {

total=0

for (var i=0; i < notas0a20.length; i++) {

if (notas0a20[i] >= 10)

total++;

}

return total; }

Page 33: Javascript tutorial

Ultima actualização: 18-10-2011

A instrução do...while

A instrução do..while executa a instrução associada até que expressão_de_condição seja

avaliada como false

function getIntValue(min,max) {

var i, lido;

do {

lido=prompt("Introduza um valor inteiro entre "+

min + "e" + max, min);

i= Number(lido);

}

while ( isNaN(i) || i < min || i > max);

return i;

}

do instrução while ( expressão_de_condição)

Ler um valor inteiro

(através da função

prompt), dentro do

intervalo [min, max]

Page 34: Javascript tutorial

Ultima actualização: 18-10-2011

var i = 0;

var n = 0;

while (i++ < 5) {

if (i == 3)

continue;

n += i;

}

*A instrução continue

A instrução continue é usada para reiniciar um ciclo . Numa instrução while é reavaliada a

condição associada. Numa instrução for o ciclo termina sendo avaliada a expressão de final de

ciclo e começa um novo ciclo na avaliação da expressão de condição

Exemplo

o exemplo seguinte mostra um ciclo while com uma instrução continue que executa quando o valor de i

for 3. Assim, n toma, sucessivamente, os valores 1, 3, 7 e 12.

continue [label]

Page 35: Javascript tutorial

Ultima actualização: 18-10-2011

A instrução return

A instrução return só pode ser usada dentro de funções. Termina de imediato a

execução da função onde está inserida. A expressão associada (opcional) é o valor

retornado pela função

return [ expressão ]

var tab =["0l2","121","16"];

var val=12

var i=0

function findValue(tab,val) {

for ( i=0 ; i < tab.length; ++i)

if (tab[i] == val)

return i;

return "nenhum é igual";

}

Page 36: Javascript tutorial

Ultima actualização: 18-10-2011

break [label]

A instrução break

A instrução break é usada para terminar um ciclo ou a instrução switch

for (i = 1;;i++) {

if (i > 10) {

break;

}

document.write(i);

}

Utilização da instrução break

para sair de um ciclo

Page 37: Javascript tutorial

Ultima actualização: 18-10-2011

var matriz = [ [ 1, 0, 3, 4, 5, 6, 7, 8, 9, 10], [ 2, 3, 4, 7, 8, 9, 0, 7, 12, 6], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] ]; var encontrou=false; for (var i=0; i < matriz.length; ++i) { for (var j=0; j < matriz[i].length; ++j) { if ( matriz[i][j] ==0) { document.write( "O valor 0 achado na posicão [" + i +"," + j + "] da matriz<br>"); encontrou= true; } } } if (encontrou==false) document.write("O valor não foi encontrado");

*A instrução break (II)

A instrução break pode ser associada à instrução label para permitir o abandono de mais que um ciclo, como mostrado no exemplo seguinte:

Ex: procurar um

elemento de uma

matriz (array

bidimensional) de

inteiros com o

valor 0

Page 38: Javascript tutorial

Ultima actualização: 18-10-2011

Eventos em JavaScript

As aplicações JavaScript em ambiente de browser são típicamente orientadas por eventos (event-

driven). Eventos ocorrem geralmente como resultado (directo ou indirecto) da interacção com o utilizador.

Premir um elemento botão, modificar um elemento texto, ou mover o rato por cima de elemento

âncora são exemplos de eventos. Para o programa reagir a um evento, terão de ser definidos event handlers, com onClick ou onChange

<a href="http://www.viseu.tv"

onMouseOver="javascript:window.status=„Ir para o site da televisão de viseu';return false;"

onMouseOut="javascript:window.status='';return false;" >

VISEU TV

</a>

O elemento âncora mostra a associação de código HTML

a handlers de eventos (onMouseOver, onMouseOut). a

instrução "return false;" garante que o evento não é

tratado por nenhum outro handler, o que poderia

comprometer o comportamento pretendido (Nota: este

processo de terminar a propagação de um evento só

funciona no Internet Explorer).

Page 39: Javascript tutorial

Ultima actualização: 18-10-2011

Tabela de eventos

nome de Handler Elementos a que se aplica Descrição

onblur A, AREA, BUTTON, INPUT, LABEL, SELECT,

TEXTAREA the element lost the focus

onchange INPUT, SELECT, TEXTAREA the element value was changed

onclick Todos com visual a pointer button was clicked

ondblclick Todos com visual a pointer button was double clicked

onfocus A, AREA, BUTTON, INPUT, LABEL, SELECT,

TEXTAREA the element got the focus

onkeydown Todos com visual a key was pressed down

onkeypress Todos com visual a key was pressed and released

onkeyup Todos com visual a key was released

onload BODY the document has been loaded

onmousedown Todos com visual a pointer button was pressed down

onmousemove Todos com visual a pointer was moved within

onmouseout Todos com visual a pointer was moved away

onmouseover Todos com visual a pointer was moved onto

onmouseup Todos com visual a pointer button was released

onreset FORM the form was reset

onselect INPUT, TEXTAREA some text was selected

onunload BODY the document has been removed

Page 40: Javascript tutorial

Ultima actualização: 18-10-2011

Eventos – exemplo (HTML)

<HTML> <HEAD> <TITLE> Quadrados e Raízes </TITLE> <script type"text/javascript" > </script> </HEAD> <BODY onload="init();"> <label for="valor" > x </label> <input type="text" id="valor" onkeyup="changedValue();" value="" /> <label for="vSquare" > x &#178; </label> <input type="text" id="vSquare" readonly="true" > <label for="vSquareRoot" > &#8730; x </label> <input type="text" id="vSquareRoot" readonly="true" > </BODY> </HTML>

O código está no slide seguinte

código Unicode

do símbolo ²

código Unicode

do símbolo √

Page 41: Javascript tutorial

Ultima actualização: 18-10-2011

Eventos – exemplo (JavaScript)

var valEdit;

var squareEdit;

var squareRootEdit;

function square(number) {

return number * number;

}

function squareRoot( x) {

var srx = 1;

while (square(srx) < x)

++srx;

return square(srx) > x ?

srx-1 :

srx;

}

function changedValue() {

var value = valEdit.value;

squareEdit.value= square(value);

squareRootEdit.value=squareRoot(value);

}

function init() {

valEdit = document.getElementById("valor");

squareEdit = document.getElementById("vSquare");

squareRootEdit= document.getElementById("vSquareRoot");

}

Page 42: Javascript tutorial

Ultima actualização: 18-10-2011

• Objectos nativos (Math, Date, String, Array)

• Novos objectos criados pelo programa, para representar entidades

• Objectos providenciados pelo ambiente de execução do JavaScript. No caso de um browser

temos, como exemplos, o objecto window e o objecto document.

Nota: No Internet Explorer existe um quarto tipo de objectos, denominados objectos ActiveX, que permitem o

acesso a recursos externos ao browser

• Atributo é um valor identificado por um nome. O conjunto de atributos de um objecto define o seu

estado

Ex: document.body; // body é atributo do objecto document

•Método é uma propriedade que representa uma função associada ao objecto. O conjunto de métodos de

um objecto caracteriza o seu comportamento

Ex: document. getElementById(...); // getElementById é metodo do objecto document

A linguagem JavaScript suporta três espécies de objectos:

Introdução aos objectos

Objectos são colecções de propriedades, que podem atributos e métodos

Page 43: Javascript tutorial

Ultima actualização: 18-10-2011

Por exemplo, imagine que pretende criar objectos para representar carros. Para definir carro,

crie uma função que especifique as propriedades (atributos e/ou métodos) que quer associar a um carro. Tal função denomina-se uma função construtora.

function Carro(fabricante, modelo, ano){

this.fabricante = fabricante;

this.modelo = modelo;

this.ano= ano;

}

Criação de novos objectos

É possível criar objectos com propriedades e métodos definidos pelo programador. Para isso

define-se uma função construtora e usa-se a instrução new para a criação dos objectos

Carro é

função

construtora

A seguir, pode criar novos carros usando a instrução de criação de objectos (new):

var mycar = new Carro("Rover", "414 Si", 1997);

Page 44: Javascript tutorial

Ultima actualização: 18-10-2011

A palavra chave this

A palavra-chave this só pode ser usada dentro de um método ou de uma função

construtora. this refere o objecto sobre o qual se invocou o método ou o objecto que está a

ser construído, no caso de uma função construtora.

Syntaxe

this[. propriedade] ou this[.metodo( parametros...) ]

Exemplo:

Seja o objecto Ponto com três propriedades - atributos (x,y) que representam as

coordenadas do ponto e método (dist) para calcular a distância a outro Ponto

function Ponto_dist( p1) {

var distx= this.x - p1.x

var disty= this.y - p1.y;

return Math.sqrt(distx*distx + disty*disty);

}

function Ponto(x,y) {

this.x=x;

this.y = y;

this.dist= Ponto_dist;

}

var p1= new Ponto(2,3), p2= new Ponto(6,6);

alert("distancia de p1 a p2 = " + p1.dist(p2));

Page 45: Javascript tutorial

Ultima actualização: 18-10-2011

Exemplo de criação de objectos - objecto Counter

Pretende-se criar objectos contadores como os

mostrados no jogo de ping-pong. Deve ser possível

definir o módulo de contagem, o número de digitos que

se pretende afixar (com zeros à esquerda), a dimensão

de cada dígito e o elemento onde o contador é inserido

new Counter(table, //elemento pai

0, // valor inicial

22, // módulo de contagem

30, // comprimento dígitos

60); // altura dígitos

Nome Descrição

value valor corrente do contador

nDigs número de dígitos da afixação do valor

maxValue módulo de contagem

viewer elemento HTML onde o contador se mostra

show mostra o contador na página

dec decrementa módulo maxValue e mostra

inc incrementa módulo maxValue e mostra

Atributos

Métodos

Page 46: Javascript tutorial

Ultima actualização: 18-10-2011

utilização do objecto Counter

<BODY onload="init();">

<div id="counterWrapper" > </div>

<input style="clear : both"

type="button"

value="Increment"

onmousedown="startInc();"

onmouseup="stop();"

/>

<input type="button"

value="Decrement"

onmousedown="startDec();"

onmouseup="stop();"

/>

</BODY>

<style type="text/css">

body { background-color : blue }

#counterWrapper {

margin-left: 20%; margin-bottom: 10%; width: 125px; height: 60px; }

background-color : rgb(0,0,0);

padding: 5px; border-style=inset; }

</style>

Page 47: Javascript tutorial

Ultima actualização: 18-10-2011

utilização do objecto Counter (script)

<!-- importar implementação do objecto Counter -->

<script type="text/javascript" src="../javascript/counter.js"> </script>

<script type="text/javascript" >

var counter;

var counterWrapper;

var interval;

function init() {

counterWrapper= document.getElementById("counterWrapper");

counter = new Counter(counterWrapper,0,100,20,40);

counter.show();

}

function startInc() {

interval=window.setInterval("counter.inc()", 50);

}

function stop() {

interval=window.clearInterval(interval);

}

function startDec() {

interval=window.setInterval("counter.dec()", 50);

}

</script>

A instrução invoca o método

show do objecto counter.

Dentro do método show,

this corresponde ao objecto

counter sobre o qual foi

invocado o método

O código do objecto

Counter está no ficheiro

counter.js

Page 48: Javascript tutorial

Ultima actualização: 18-10-2011

objecto Counter (implementação I)

function Counter_show() {

var aux = this.value;

var images= this.viewer.childNodes;

for (i= images.length-1; i >=0; --i) {

var dig = aux %10;

aux= Math.floor( aux /10);

// gerar o nome do ficheiro com o gif correspondente

var gifName = "images/digits/" + dig + "7SEG.GIF";

images[i].src= gifName;

}

this.viewer.style.visibility="visible";

}

function Counter_increment() {

this.value++;

if (this.value == this.maxValue+1) this.value=0;

this.show();

}

function Counter_decrement() {

this.value--;

if (this.value < 0) this.value=this.maxValue;

this.show();

}

métodos de

Counter

afixar o valor corrente

na página

decrementa o valor

módulo maxValue e

mostra o novo valor

incrementa o valor

módulo maxValue e

mostra o novo valor

Page 49: Javascript tutorial

Ultima actualização: 18-10-2011

classe Counter (implementação II)

function Counter(viewer, value, module, w,h) {

// atributos

this.value=value;

this.nDigs = numberOfDigits(module-1); this.module = module;

this.viewer = viewer;

// metodos

this.show = Counter_show;

this.inc = Counter_increment;

this.dec = Counter_decrement;

// construir os elementos imagem para os digitos e inseri-los em viewer

for(i=0; i < this.nDigs; ++i) {

var newImg = document.createElement("img");

newImg.style.width=w;

newImg.style.height=h;

this.viewer.appendChild(newImg);

}

this.viewer.style.visibility="hidden";

}

A função construtora de Counter

Parâmetros:

viewer : elemento html que vai conter os

digitos do contador

value: valor inicial

module: módulo de contagem

w,h: comprimento e largura de cada

digito

função que retorna

o total de dígitos de

um número

Page 50: Javascript tutorial

Ultima actualização: 18-10-2011

Object objecto genérico

Math Contém propriedades e métodos utéis em cálculos

matemáticos

Date para trabalhar com datas

String propriedades e métodos utéis para manipular strings

Array propriedades e métodos utéis para manipular arrays

Objectos nativos

Em JavaScript existem os seguintes objectos nativos:

Page 51: Javascript tutorial

Ultima actualização: 18-10-2011

métodos genéricos para todos os objectos

Método Descrição

toString Retorna uma representação textual do objecto

valueOf Returna o valor primitivo (caso exista) do objecto corrente

Se p for um ponto definido no slide anterior, então:

alert("p.toString()=" + p.toString()",p.valueOf()=" + p.valueOf() );

Todos os objectos em JavaScript possuem os métodos indicados na tabela abaixo.

O resultado da chamada dos métodos depende, no entanto, do tipo do objecto.

Exemplos:

var s= new String("abc");

alert("s.toString()=" + s.toString() + ",s.valueOf()=" + s.valueOf() );

Page 52: Javascript tutorial

Ultima actualização: 18-10-2011

objectos Date

objectos Date facilitam o tratamento de datas

existem variadas formas de criar novos objectos Date:

var date = new Date( [ parâmetros ] );

Exemplos

var today= new Date(); // criar um objecto Date com a data corrente

var natal95 = new Date("December 25, 1995 00:00:00").

• A string representing a date in the following form: "Month day, year hours:minutes:seconds. if you omit hours, minutes, or seconds, the value will be set to zero

O alcance de datas é de -100,000,000 dias até 100,000,000 days relativos a 1 de Janeiro de 1970

Page 53: Javascript tutorial

Ultima actualização: 18-10-2011

objectos Date (II)

Método Descrição

getDate Returns the day of the month (0..31)

getDay Returns the day of the week (0..6)

getFullYear Returns the full year (in 4 digits)

getHours Returns the hour (0..23)

getMilliseconds Returns the milliseconds (0..999)

getMinutes Returns the minutes (0..59)

getMonth Returns the month in the specified date according to local time.

getSeconds Returns the seconds (0..59)

setDate Sets the day of the month

setFullYear Sets the full year

setHours Sets the setMilliseconds

setMinutes Sets the minutes

setMonth Sets the month

setSeconds Sets the seconds

toGMTString Converts a date to a string, using the Internet GMT conventions

Page 54: Javascript tutorial

Ultima actualização: 18-10-2011

O objecto Math

Propriedade Descrição

E Euler’s constant and the

base of natural logarithms,

approximately 2.718.

LN10 Natural logarithm of 10,

approximately 2.302.

LN2 Natural logarithm of 2,

approximately 0.693.

LOG10E Base 10 logarithm of E

(approximately 0.434).

LOG2E Base 2 logarithm of E

(approximately 1.442).

PI Ratio of the circumference

of a circle to its diameter,

approximately 3.14159.

SQRT1_2 equivalently, 1 over the

square root of 2 -

approximately 0.707.

SQRT2 Square root of 2,

approximately 1.414.

Método Descrição

abs Returns the absolute value of a number.

acos Returns the arccosine (in radians) of a number.

asin Returns the arcsine (in radians) of a number.

atan Returns the arctangent (in radians) of a number.

atan2 Returns the arctangent of the quotient of its arguments.

ceil Returns the smallest integer greater than or equal to a number.

cos Returns the cosine of a number.

exp Returns Enumber, where number is the argument, and E is Euler’s, constant, the base of the natural logarithms.

floor Returns the largest integer less than or equal to a number.

log Returns the natural logarithm (base E) of a number.

max Returns the greater of two numbers.

min Returns the lesser of two numbers.

pow Returns base to the exponent power, that is, baseexponent.

random Returns a pseudo-random number between 0 and 1.

round Returns the value of a number rounded to the nearest integer.

sin Returns the sine of a number.

sqrt Returns the square root of a number.

tan Returns the tangent of a number.

Page 55: Javascript tutorial

Ultima actualização: 18-10-2011

objectos String

Método Descrição

charAt(index) Returns the character at the specified index

charCodeAt(index) Returns a number indicating the Unicode value of the character at the given index

concat(s1,s2,...) Combines the text of two strings and returns a new string

indexOf(str [, firstIdx]) Returns the index within the calling String object of the first occurrence of the specified value, or -1 if not

found

lastIndexOf(str [, firstIdx]) Returns the index within the calling String object of the last occurrence of the specified value, or -1 if not

found

slice(idxStart [, idxEnd]) Extracts a section of a string and returns a new string

split( separator[nSplits]) Splits a String object into an array of strings by separating the string into substrings

substr(idxStart, nChars) Returns the characters in a string beginning at the specified location through the specified number of

characters

substringIidxStart,idxEnd) Returns the characters in a string between two indexes into the string

toLowerCase() Returns the calling string value converted tolowercase

toSource() Returns an object literal representing the specified object. You can use this value to create a new object

toString() Returns a string representing the specified object

toUpperCase() Returns the calling string value converted to uppercase

valueOf() Returns the primitive value of the specified object

Atributo Tipo Descrição ReadOnly

length Number Reflects the length of the string. S

Page 56: Javascript tutorial

Ultima actualização: 18-10-2011

var a, x, y;

var r=10;

a = Math.PI * r * r;

x = r * Math.cos(Math.PI);

y = r * Math.sin(Math.PI/2);

A instrução with define o objecto onde são procurados por omissão os nomes referidos no

programa

Se um nome existe como propriedade do objecto referido na instrução with englobante então esse

objecto é usado.

Senão, o nome é entendido como o de uma variável local, ou global

Exemplo: A instrução é especialmente útil com objectos usados em expressões, como o

objecto Math

*A instrução with

with ( object) { instruções }

var a, x, y;

var r=10;

with (Math) {

a = PI * r * r;

x = r * cos(PI);

y = r * sin(PI/2);

}

Page 57: Javascript tutorial

Ultima actualização: 18-10-2011

Hierarquia de Objectos do Browser

O browser instancia um conjunto de objectos que

permitem a manipulação em javascript dos vários

elementos das páginas carregadas.

Os atributos e métodos do objecto window podem

ser acedidos sem referir explicitamente o objecto

• Exs: window.document document

window.alert("viva!") alert("viva!")

Nos slides seguintes apresentam-se as Atributos e

métodos mais relevantes dos objectos:

• window

• document

• location

• navigator

Excerto da hierarquia de

objectos representantes dos

documentos html acedidos

numa sessão do browser

checkbox

anchorsdocument

locationwindow

forms

images

links

history

buttons

radio

navigator

Page 58: Javascript tutorial

Ultima actualização: 18-10-2011

O objecto window (Atributos e handlers de eventos)

Atributo Descrição

screenLeft Retrieves the x-coordinate of the upper left-hand corner of the browser's client area, relative to the upper left-

hand corner of the screen.

screenTop Retrieves the y-coordinate of the top corner of the browser's client area, relative to the top corner of the screen.

status Sets or retrieves the message in the status bar at the bottom of the window.

document Represents the HTML document in a given browser window.

history Contains information about the URLs visited by the client.

location Contains information about the current URL.

navigator Contains information about the Web browser.

screen Contains information about the client's screen and rendering capabilities.

handler Descrição

onblur Fires when the object loses the input focus.

onfocus Fires when the object receives the focus.

onload Fires immediately after the browser loads the object.

onresize Fires when the size of the object is about to change.

onunload Fires immediately before the object is unloaded.

Handlers de eventos

Atributos

Page 59: Javascript tutorial

Ultima actualização: 18-10-2011

O objecto window (métodos)

Método Descrição Exemplo

alert(msgStr) Displays a dialog box containing an application-defined message.

setInterval(codigo, timeVal)

Executa repetidamente o código Javascript presente na string codigo de cada vez vez que deccorer o tempo (em miliseg.) definido em timeVal

var timer= setInterval(“tick()”,1000); // invoca a função tick todos os // segundos

clearInterval(intervalId) Cancels the interval previously started using the setInterval method.

var idInt=setInterval(f,10);

clearInterval(idInt);

close() Closes the current browser window

confirm(msgStr) Displays a confirmation dialog box that contains an optional message as well as OK and Cancel buttons.

navigate(urlStr) Loads the specified URL to the current window.

open(urlStr) Opens a new window and loads the document specified by a given URL.

prompt(msgStr, valStr) Displays a dialog box that prompts the user with a message and an input field.

setTimeout(codigo, timeVal)

Executa o código Javascript presente na string codigo de quando deccorer o tempo (em miliseg.) definido em timeVal

var timer= setTimeout(“fim();”, 2000);

//invoca a função fim após 2 segundos

clearTimeout(timerId) Cancels a time-out that was set with the setTimeout method.

var idTimer=setTimeout(f,10);

clearTimeout(idTimer);

O objecto window oferece um conjunto de serviços úteis para a criação de aplicações interactivas e a

possibilidade de navegar nas páginas acedidas durante a sessão.

Page 60: Javascript tutorial

Ultima actualização: 18-10-2011

* Objecto navigator

Atributo Tipo Descrição R/O

appCodeName String Retrieves the code name of the browser. S

appMinorVersion String Retrieves the application's minor version value. S

appName String Retrieves the name of the browser. S

appVersion String Retrieves the platform and version of the browser. S

browserLanguage String Retrieves the current browser language. S

cookieEnabled String Retrieves whether client-side persistent cookies are enabled in the browser.

Persistent cookies are those that are stored on the client-side computer.

S

cpuClass String Retrieves a string denoting the CPU class. S

online String Retrieves a value indicating whether the system is in global offline mode. S

platform String Retrieves the name of the user's operating system. S

systemLanguage String Retrieves the default language used by the operating system. S

userLanguage String Retrieves the operating system's natural language setting. S

O objecto Navigator permite obter informações acerca do browser

Page 61: Javascript tutorial

Ultima actualização: 18-10-2011

* Objecto location

O objecto location permite aceder às características do URL da página corrente.

Atributo Tipo Descrição

hostname String Sets or retrieves the host name part of the location or URL.

href String Sets or retrieves the entire URL as a string.

pathname String Sets or retrieves the file name or path specified by the object.

protocol String Sets or retrieves the protocol portion of a URL.

Método Descrição

reload() Reloads the current page.

replace(urlStr) Replaces the current document by loading another document at the specified URL.

Propriedades

Page 62: Javascript tutorial

Ultima actualização: 18-10-2011

<TABLE>

<TBODY>

<TR>

<TD>Shady Grove</TD>

<TD>Aeolian</TD>

</TR>

<TR>

<TD>Over the River, Charlie</TD>

<TD>Dorian</TD>

</TR>

</TBODY>

</TABLE>

DOM (Document Object Model)

O DOM é um standard do W3C que especifica as propriedades dos objectos que

representam os elementos existentes em documentos HTML (e noutras linguagens baseadas em

marcas). Tanto o Internet Explorer como o NetScape respeitam, de forma geral, o standard DOM.

Nesta secção são descritos as interfaces DOM mais utilizados.

Nós DOM que

representam o excerto de

documento HTML à

esquerda

Elementos

Nós de texto

Page 63: Javascript tutorial

Ultima actualização: 18-10-2011

DOM (genérico)

A ligação entre os nós representa

uma associação "é um": por

exemplo, a interface Document

também é uma interface Node, ou

seja, possui todas os atributos e

métodos descritas em Node

O diagrama mostra as interfaces DOM genéricas, isto é,

aquelas que existem em qualquer documento baseado em

marcas, mesmo que não seja HTML. Neste contexto,

chamamos interface à descrição de um conjunto de atributos e

métodos. Um objecto que respeita a interface Node é um Node

porque contém todas as propriedades descritas em Node. A

maior parte dos objectos DOM são Nodes. As excepções são

objectos que representam sequências de Nodes, como

NameNodeMap e NodeList

Page 64: Javascript tutorial

Ultima actualização: 18-10-2011

Atributos de Node

Propriedade Tipo Descrição

Read/Only

nodeName String. O nome do nó S

nodeType Number.

O tipo do nó (elemento, texto, comentário...)

S

parentNode Node O elemento pai S

childNodes NodeList A coleccção de nós filhos S

firstChild Node O primeiro filho. null se não existir S

lastChild Node O último filho. null se não existir S

previousSibling Node O irmão anterior S

nextSibling Node O irmão seguinte S

attributes NamedNodeMap A colecção de atributos S

ownerDocument Document O documento a que pertence o nó S

A tabela mostra as propriedades

comuns a todos os objectos que

representam elementos e texto em

documentos HTML Propriedades

Page 65: Javascript tutorial

Ultima actualização: 18-10-2011

Tipos de Nodes (valores do campo NodeType)

Nome Valor

ELEMENT_NODE 1

ATTRIBUTE_NODE 2

TEXT_NODE 3

CDATA_SECTION_NODE 4

PROCESSING_INSTRUCTION_NODE 7

DOCUMENT_NODE 9

COMMENT_NODE 8

Page 66: Javascript tutorial

Ultima actualização: 18-10-2011

métodos de Node

Método Parâmetros Retorna Descrição

insertBefore(newChild, refChild) newChild : Node

refChild: Node

Node Insere o novo nó filho newChild

antes do nó filho refChild. Retorna

newChild

replaceChild(newChild, oldChild) newChild : Node

oldChild : Node

Node Substitui o nó filho oldChild por

newChild. Retorna oldChild

removeChild(oldChild) oldChild : Node Node Retira o nó filho oldChild. Retorna

oldChild.

appendChild(newChild) newChild : Node Node Acrescenta newChild como ultimo

filho. Retorna newChild

hasChildNodes() Não tem Boolean true se o elemento tiver filhos

cloneNode(deep) deep : Boolean

a true indica que os nós

filhos também são copiados

Node Cria um nó idêntico ao nó corrente.

Retorna o novo nó

Métodos

A tabela mostra os métodos que

são comuns a todos os objectos

que representam elementos e texto

em documentos HTML

Page 67: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de NamedNodeMap

Nome Tipo Descrição R/O

length Number indica o número de nós

do NodeMap

S

Método Descrição

getNamedItem(name) retorna o valor (Node) associado ao nó name. Se nodeMap for uma variável que

referencia um NodeMap então:

nodeMap.getNamedItem ("item1") nodeMap["item1"]

setNamedItem(arg) acrescenta ao NodeMap o nó indicado

removeNamedItem(name) remove do NodeMap o nó name

item(index) retorna o nó na posição index. Se nodeMap for uma variável que referencia um NodeMap então: nodeMap.item(2) nodeMap[2]

Certas propriedades de objectos

que representam elementos HTML

referenciam objectos

NamedNodeMap, que não são

mais que colecções de pares nome-

valor, em que nome é uma string.

São usados, por exemplo, para

representar os atributos de um

elemento

Atributos

Métodos

Page 68: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de NodeList

Nome Tipo Descrição R/O

length Number indica o número de nós

na sequência

S

Método Descrição

item(index) retorna o nó na posição index. Se nodeList for uma variável que referencia um NodeList então: nodeList.item(2) nodeList[2]

Certas propriedades de objectos

que representam elementos HTML

referenciam objectos NodeList, que

não são mais do que uma

sequência de nós. São usados, por

exemplo, para representar os

elementos filhos de um elemento

Atributos

Métodos

Um NodeList pode ser visto

com um Array de nós

Page 69: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de Text e Comment

Nome Tipo Descrição Readonly

data String. representa o texto N

length Number Número de caracteres do texto S

Método Parâmetros Retorna Descrição

substringData(offset, count) offset : Number.

count : Number

String retorna a substring do texto

com dimesão count a partir de

offset

appendData(arg) arg: String Nada acrescenta a string arg ao texto

insertData(offset, arg) offset : Number

arg : String

Nada insere a string arg a partir de

offset

deleteData(offset, count) offset : Number

count : Number

Nada apaga count caracteres do

texto a partir de offset

replaceData(offset, count, arg) offset : Number

count : Number

arg : String

Nada substitui count caracteres a

partir de offset pela string arg

Atributos

Métodos

Page 70: Javascript tutorial

Ultima actualização: 18-10-2011

Attr (atributo)

Nome Tipo Descrição Readonly

name String nome do atributo S

specified Boolean indica se o atributo está

especificado no elemento

S

value String valor do atributo N

Attr tem todas as propriedades de Node bem como as propriedades da tabela abaixo

Propriedades

Page 71: Javascript tutorial

Ultima actualização: 18-10-2011

DOM (excerto da hierarquia de objectos para documentos HTML)

A maior parte dos

objectos para

representar

documentos HTML

são Nodes.

HTMLCollection é a

excepção

Page 72: Javascript tutorial

Ultima actualização: 18-10-2011

propriedades de HTMLCollection

Propriedade Tipo Descrição ReadOnly

length Number Total de Nós da colecção S

Método Parâmetros Retorno Descrição

item(index) Number index Node devolve o nó da colecção de índice

index. Em caso de falha retorna null

namedItem(name) String name Node Devolve o nó da colecção com id

name. Em caso de falha retorna null

Atributos

Métodos

Uma HTMLCollection pode ser vista

com um Array de nós, isto é, se col

for uma HTMLCollection, então

col.item(i) col[i]

Page 73: Javascript tutorial

Ultima actualização: 18-10-2011

attributos do objecto document

Atributos Tipo Descrição R/O

title String. O valor do elemento TITLE N

referrer String. O URL da página que permitiu a negação a este documento S

URL String. O URL completo do documento S

body HTMLElement O objecto que representa o elemento body N

images

HTMLCollection

Colecção das imagens do documento S

links

HTMLCollection

Colecção das imagens do documento S

forms HTMLCollection Colecção das forms do documento

S

anchors HTMLCollection Colecção dos elementos âncora do documento S

cookie String lista de coockies na forma nome1=valor1;nome2=valor;... N

Page 74: Javascript tutorial

Ultima actualização: 18-10-2011

métodos do objecto document

Método Parâmetros Retorna Descrição

createAttribute(atrName) atrName: String Attr

cria um atributo com o nome

especificado e valor null

createComment(strComment) strComment: String Comment cria um objecto comentário com a string

strComment.

createElement(elemName) elemName: String

Element cria um elemento de nome elemName

Ex: document.createElement("img") cria

um objecto img.

createTextNode(strText) strText: String Text cria um nó de texto com os caracteres

indicados em strText

getElementById(strId) strId: String Element retorna o objecto de id strId.

getElementsByName(strName) strName: String NodeList retorna a sequência de objectos de nome

strName

open() Não tem Nada abrir o documento para injectar HTML

close() Não tem Nada fechar o documento préviamente aberto

e forçar a visualização das alterações

write(msg) msg : String Nada escreve texto HTML no documento,

desde que este esteja aberto

writeln(msgr) msg : String Nada escreve texto HTML no documento,

seguido de uma mudança de linha,desde

que o documento esteja aberto

Page 75: Javascript tutorial

Ultima actualização: 18-10-2011

propriedades de um elemento genérico HTML (HTMLElement)

Attr tem todas as propriedades de Element bem como as propriedades da tabela abaixo

Propriedade Tipo Descrição Readonly

id String. O valor do atributo id N

title String. O valor do atributo title N

lang String. O valor do atributo lang N

dir String. O valor do atributo dir N

className String. O valor do atributo class. Denomina-se

className porque class é palavra

resevada em JavaSCript

N

Propriedades

Page 76: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de HTMLInputElement

HTMLInputElement tem

todas as propriedades de

HTMLElement bem como

as propriedades da tabela

ao lado

Nome Tipo Descrição Readonly

defaultValue String O valor inicial no caso de input tipo text

ou password N

defaultChecked Boolean o estado inicial no caso de input tipo

radio ou checkbox N

alt String o texto alternativo caso o browser não

possa mostrar o elemento N

checked Boolean o estado corrente no caso de input tipo

radio ou checkbox N

maxLength Number máximo de caracteres do input caso seja

text ou password N

name String identificador de grupo para radio buttons N

readOnly Boolean a true se não poder ser alterado (text ou

password) N

type String o tipo de elemento input N

value String o valor associado ao elemento N

Método Descrição blur() retira o foco do elemento

focus() coloca o foco no elemento

select() simula uma selecção no elemento

click() simula um click no elemento

Atributos

Métodos

Page 77: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de HTMLSelectElement

HTMLSelectElement

tem todas as

propriedades de

HTMLElement bem

como as propriedades

das tabelas ao lado

Propriedade Tipo Descrição Readonly

type String a string "select-multiple" ou "select-

one", dependendo do atributo multiple

S

selectedIndex Number o índice do elemento seleccionado, a

começar em 0. Se nenhum elemento está

selccionado, vale -1

S

value String o valor do atributo value do elemento

seleccionado

N

length Number o número de opções S

options HTMLCollection uma colecção com as opções S

multiple Boolean true se for de selecção múltipla N

size Number o total de linhas visíveis N

tabIndex Number A tecla tab permite navegar dentro dos

elementos de um form(taborder).

tabIndex define índice no taborder.

N

Método Parâmetros Retorna Descrição

add(element, before) element : HTMLElement before :HTMLElement acrescenta uma opção

remove(index) index : long Nada remove a opção de

índice index

blur() Não Tem Nada retira o foco

focus() Não Tem Nada pôe o foco

Atributos

Métodos

Page 78: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de HTMLOptionElement

HTMLOptionElement tem todas as propriedades de HTMLElement bem como as propriedades da tabela

abaixo

Nome Tipo Descrição Readonly

defaultSelected Boolean valor da opção seleccionada à

priori

S

text String o texto contido na opção S

index Number o índice (a começar em 0) da

opção no elemento select a

que pertence

S

selected Boolean true se a opção for a

seleccionada

N

value String o valor do atributo HTML value N

Propriedades

Page 79: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de HTMLTextAreaElement

HTMLTextAreaElement tem todas as propriedades de HTMLElement bem como as propriedades das

tabelas abaixo

Nome Tipo Descrição R/O

defaultValue String o valor inicial N

cols Number comprimento do elemento em

caracteres

N

name String o nome do elemento se está

dentro de um form

N

readOnly Boolean true se for só de leitura N

rows Number o número de linhas vísiveis do

elemento

N

type String a string "textarea" S

value String o texto associado ao elemento N

Método Descrição

blur() retira o foco do elemento

focus() poe o foco no elemento

select() seleccionado o texto do elemento

Atributos

Métodos

Page 80: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades e métodos de HTMLTableElement

Propriedade Tipo R/

O

caption HTMLTableCaptionElement N

tHead HTMLTableSectionElement N

tFoot HTMLTableSectionElement N

rows HTMLCollection N

tBodies HTMLCollection N

Método Parâmetros Retorno

createTHead() Não tem HTMLTHeadElement

deleteTHead() Não tem Não tem

createTFoot() HTMLTFootElement Não tem

deleteTFoot() Não tem Não tem

createCaption() Não tem HTMLCaptionElement

deleteCaption() Não tem Não tem

insertRow(index) Number index HTMLRowElement

deleteRow(index) Number index Não tem

HTMLTableElement tem todas as propriedades de HTMLElement bem como as propriedades das

tabelas abaixo

Propriedades Métodos

Page 81: Javascript tutorial

Ultima actualização: 18-10-2011

Propriedades de HTMLTableRowElement

HTMLTableRowElement tem todas as propriedades de HTMLElement bem como as propriedades

definidas aqui

Propriedade Tipo R/O

rowIndex Number S

sectionRowIndex Number S

cells HTMLCollection S

Método Parâmetros Retorno

insertCell(index) index :Number HTMLTableCellElement

deleteCell(index) index : Number Não tem

Atributos

Métodos

Page 82: Javascript tutorial

Ultima actualização: 18-10-2011

propriedades de HTMLTableCellElement

HTMLTableCellElement tem todas as propriedades de HTMLElement bem como as propriedades

definidas aqui

Propriedade Tipo Descrição R/O

cellIndex Number índice da célula (a começar em zero) na linha a que

pertence S

abbr String abreviatura da célula N

colSpan Number total de colunas ocupadas pela célula N

height String altura da célula N

noWrap Boolean true se não houver mudançda automática de linha no

texto da célula N

rowSpan Number total de linhas ocupadas pela célula N

Propriedades

Page 83: Javascript tutorial

Ultima actualização: 18-10-2011

Objecto que representa um evento de mouse

Nome Descrição

screenX This read-only property is a number.

screenY This read-only property is a number.

clientX This read-only property is a number.

clientYr This read-only property is a number.

ctrlKey This read-only property is of type Boolean.

shiftKey This read-only property is of type Boolean.

altKey This read-only property is of type Boolean.

metaKey This read-only property is of type Boolean.

button This read-only property is of type Number.

Apenas o NetScape 6.0 ou

superior suportam os objectos

evento apresentados!

Propriedades

Page 84: Javascript tutorial

Ultima actualização: 18-10-2011

Objecto que representa um evento de tecla

Nome Descrição

outputString This property is of type String.

keyVal This property is of type int.

virtKeyVal This property is of type int.

inputGenerated This property is of type boolean.

numPad This property is of type boolean.

Propriedades

Apenas o NetScape 6.0 ou

superior suportam os objectos

evento apresentados!

Page 85: Javascript tutorial

Ultima actualização: 18-10-2011

Anexos

Elementos HTML de interacção

Acesso a estilos em JavaScript

Palavras Reservadas

Bibliografia

Índice

Page 86: Javascript tutorial

Ultima actualização: 18-10-2011

Password <input type="password" id="txtPassword" />

<input type="radio" name="ages" /> 1-10 years old

<input type="radio" name="ages"checked="true" />

11 years old

<input type="radio" name="ages" /> 12-120 years old

<input type="button" id="emergencyBtn" value="push me!" onClick="alert('Aggggghh!!!!');" />

Elementos HTML de interação (inputs)

input

button

input

password

input

radio

Page 87: Javascript tutorial

Ultima actualização: 18-10-2011

Elementos HTML de interação (inputs)

<input type="text "value="para inserir texto" id="textbox" size=15 />

input

text

Uncheck this check box for some free advice.

< input type="checkbox" checked="true" id="chk1" onclick="choosebox1()" />

input

checkbox

Page 88: Javascript tutorial

Ultima actualização: 18-10-2011

<textarea STYLE="overflow:hidden" id=txtComments>

The patient is in stable condition

</textarea>

Elementos HTML de interacção (select e textarea)

<select id="cars" name="Cars" multiple>

<option value="1" selected>BMW

<option value="2">Porsche

<option value="3" selected>Mercedes

</select>

<select name="Cats" size="1">

<option value="1">Calico

<option value="2">Tortie

<option value="3" selected>Siamese

</select>

multiple

select

single

select

textarea

Page 89: Javascript tutorial

Ultima actualização: 18-10-2011

Elementos HTML de interação (exemplo )

<div class="dialogBox" > <div> <span> Nome: </span> <input id="name" type="text" value="Your Name" /> </div> <div> <span> Password: </span><input type="password" id="passwdBox" /> </div> <div> Nível: <div class="levels"> <div> <span> Básico </span> <input type="radio" id="basico" name="level" value="0" checked /> </div> <div> <span> Intermédio </span> <input type="radio" id="intermedio" name="level" value ="1" /> </div> <div> <span> Avançado </span> <input type="radio" id="avancado" name="level" value ="2" /> </div> </div> </div> <div> Mudanças Automáticas: <input id="autoChanger" type="checkbox" checked="true" /> </div> <div> Imagens por seg.: <select id="imagesPerSec" > <option value="15" > Quinze </option> <option value="20" selected="true"> Vinte </option> <option value="25" > Vinte e Cinco </option> <option value="30" > Trinta </option> </select> </div>

</div>

No slide seguinte

está o aspecto do

formulário gerado

pelo HTML,

depois de

aplicada a style

sheet também

apresentada

Page 90: Javascript tutorial

Ultima actualização: 18-10-2011

Elementos HTML de interação (exemplo)

.dialogBox { position : absolute ; top : 20%; left: 20% }

.dialogBox { background-color : blue ; padding: 20px; }

.dialogBox { font-family : "Arial"; font-size: 14px; color : yellow}

.dialogBox span { width: 5em }

.dialogBox .levels { margin-left : 3 em }

style sheet associada ao excerto

HTML do slide anterior para obter o

aspecto mostrado na figura à direita

Page 91: Javascript tutorial

Ultima actualização: 18-10-2011

<HTML> <HEAD

<TITLE> Acesso a estilos em JavaScript</TITLE> <script type="text/javascript" >

var showed=true; var digit; var toggle; function mostraEsc() { if (showed) { digit.style.visibility="hidden"; toggle.value="Mostra"; } else { digit.style.visibility="visible"; toggle.value="Esconder"; } showed = !showed; } function init() { digit = document.getElementById("digit"); toggle= document.getElementById( alert(digit.style.visibility); } </script>

</HEAD> <BODY onload="init();" > <input type="button" value="Esconder" onclick="mostraEsc();" id="toggle"/> <img src="c:\images\digits\9.gif" id="digit" /> </BODY> </HTML>

Acesso a estilos em JavaScript todos os objectos DOM que representam elementos HTML possibilitam o acesso ao atributo style (inline style)

através de uma propriedade com o mesmo nome (style). A propriedade style é um objecto com propriedades

com os mesmos nomes dos atributos de estilo existentes, excepto quando se usam hiphens nos nomes dos

atributos de estilo. Nesse caso, o hiphen é omitido e a letra a seguir é colocada em maíuscula (por exemplo,

background-color chama-se em JavaScript backgroundColor)

Embora o estilo por

omissão de visibility

seja "inherit", o estilo

mostrado é uma string

vazia!

Isto acontece porque a

propriedade style não

representa o estilo

"corrente", mas apenas

as regras de estilo

definidas inline.

Page 92: Javascript tutorial

Ultima actualização: 18-10-2011

Palavras Reservadas

break with function return typeof

case do if switch var

catch else in this void

continue false instanceof throw while

default for null try

delete finally new true

abstract double got o native static

boolean enum implements package super

byte export import private synchronized

char extends int protected throws

class final interface public transient

const float long short volatile

Palavras reservadas

Palavras reservadas mas não utilizadas

Page 93: Javascript tutorial

Ultima actualização: 18-10-2011

* Conceitos avançados

Recursividade

Excepções

Esta matéria não faz parte do programa da disciplina, estando aqui

presente como informação para os alunos mais interessados

Page 94: Javascript tutorial

Ultima actualização: 18-10-2011

A recursividade é um instrumento de programação poderoso, pois permite resolver muitos problemas de forma mais natural. Em JavaScript a recursividade exprime-se através de uma função que se invoca, directa ou indirectamente, a ela própria.

Exemplo a função factorial

Qualquer algoritmo recursivo segue o esquema geral da função factorial acima, isto é:

Caso tenha sido atingida a situação em que o resultado é imediato (no caso do factorial quando

n=0, n! é 1 por definição) é retornado o valor correspondente. A esta situação limite chama-se a

condição terminal da recursividade.

Se a condição não tiver sido atingida, aplica-se a expressão que exprime a recursividade (no caso

do factorial n! = n*(n-1)! ). Note-se que é fundamental que cada invocação recursiva esteja mais perto

da condição terminal (convirja), pois é importante que o algoritmo termine! No caso do factorial isso é

óbvio. Em cada chamada, n diminui de uma unidade, logo chega a zero!

Recursividade

function factorial(n) {

if (n==0) return 1;

return n*factorial(n-1);

}

n>0 n*(n-1)! n! n=0 1

Page 95: Javascript tutorial

Ultima actualização: 18-10-2011

Recursividade (II)

Imagine que se pretende colocar os digitos de um número num array de inteiros, do dígito de maior peso para

o dígito de menor peso.

O dígito de menor peso é fácil de arranjar - se n for o número, n % 10 (resto da divisão inteira) é o dígito

de menor peso.

O número sem o dígito de menor peso também se obtém facilmente- se n é o número , Math.floor(n /10)

é o número ao qual se retirou o dígito de menor peso.

Podemos assim pensar num algoritmo para obter os sucessivos dígitos de um número:

O problema é que os dígitos ficam no array por ordem inversa à pretendida. Como é que a recursividade nos

ajuda a resolver o problema?

var n = ...; // o número

var digits=new Array(); // array onde ficam os dígitos de n

var i=0;

do {

digits[i++] = n % 10;

n = Math.floor(n/10);

}

while (n> 0);

Page 96: Javascript tutorial

Ultima actualização: 18-10-2011

function arrayFromValue(numero, ndigits, digits) {

if (value < 10) {

// colocar tantos zeros quantos os necessários para ocupar ndigits casas

for (i=1; i < ndigs; ++i) {

digits[digits.length] = 0;

}

// agora escrever o caracter correspondente

digits[digits.length] = value;

}

else {

arrayFromValue(Math.floor(value/10), ndigits-1, digits);

digits[digits.length] = value%10;

}

}

A seguir mostra-se uma uma função recursiva que coloca os dígitos na ordem certa e que além disso coloca

zeros necessários no array para ocupar no mínimo ndigits caracteres

Se o número for inferior a 10 então o objectivo está praticamente cumprido: basta colocar ndigits-1 a zero e de

seguida o número. Está encontrada a condição terminal da recursividade.

Senão, temos de encontrar uma definição recursiva que se pode enunciar como:

1. Colocar no array o número sem o algarismo das unidades.

2. Colocar o algarismo das unidades

Recursividade (III)

Colocar no array o

número sem o

algarismo da unidades

(chamada recursiva)

Colocar o algarismo

das unidades

Page 97: Javascript tutorial

Ultima actualização: 18-10-2011

Navegar na hierarquia de elementos do documento

<BODY onunload="closeWindows();" >

<input type="button" value="Show Nodes Tree" onclick="showTree();"/>

<div id="teste"> Teste </div>

</BODY>

Pretende-se fazer um programa em JavaScript

que tenha a capacidade de mostrar, numa

textarea de nova janela de browser criada para

o efeito, a hierarquia de elementos de qualquer

página. Aplicado ao body de documento HTML

definido acima, teria o resultado mostrado na

figura ao lado

<HTML>

<BODY>

<textarea id="screen" rows="20" cols="80">

</textarea>

</BODY>

</HTML> página que é usada para mostrar a

hierarquia de elementos da página corrente

Page 98: Javascript tutorial

Ultima actualização: 18-10-2011

Navegar na hierarquia de elementos do documento

// usada para fechar a janela auxiliar que mostra

// a hierarquia

function closeWindowScreen() {

if (newWindow != undefined) newWindow.close();

}

// função utilitária para indentar o inicio de cada

// linha de acordo com a posicao do elemento na

// hierarquia

function indent(page,level) {

for (i=0; i < level; ++i) page.value +=" ";

}

// função principal. Abre a janela auxiliar e invoca

// a função recursiva sTree que escreve na textArea screen

// a hierarquia existente no elemento body corrente function showTree() {

closeWindowScreen();

newWin = window.open("screen.html");

var screen;

screen=newWin.document.getElementById("screen");

sTree(document.body, screen, 0);

}

var newWindow;

var ELEMENT_NODE=1;

var nodeTypes= [

"EMPTY_NODE",

"ELEMENT_NODE",

"ATTRIBUTE_NODE",

"TEXT_NODE",

"CDATA_SECTION_NODE",

"ENTITY_REFERENCE_NODE",

"ENTITY_NODE",

"PROCESSING_INSTRUCTION_NODE",

"COMMENT_NODE",

"DOCUMENT_NODE",

"DOCUMENT_TYPE_NODE",

"DOCUMENT_FRAGMENT_NODE",

"NOTATION_NODE"

];

a propriedade nodeType de qualquer elemento tem um valor inteiro

cujo significado é dado pelas strings da tabela nodeTypes

Page 99: Javascript tutorial

Ultima actualização: 18-10-2011

function sTree(elem, page, level) {

indent(page,level); page.value += nodeTypes[elem.nodeType] + ", nome=" + elem.nodeName;

if (elem.data != null) page.value += ", texto=" + elem.data;

page.value += "\n";

if (elem.nodeType != ELEMENT_NODE) return;

indent(page,level); page.value += "atributos:\n";

indent(page,level+1);

var atribs= elem.attributes;

if (atribs != undefined) {

var nUnspec=0, first=true;

for (var i=0; i < atribs.length;++i) {

if (atribs[i].specified) {

if (!first) page.value+=","; else first=false;

page.value += atribs[i].name + "=\"" + atribs[i].value + "\"";

}

else nUnspec++;

}

if (!first) page.value+="\n";

if (nUnspec != 0) {

indent(page,level+1); page.value += nUnspec + " atributos não especificados!\n";

}

}

indent(page,level); page.value += "filhos:\n";

if (!elem.hasChildNodes()) {

indent(page,level+1); page.value += "Não tem!\n";

}

else {

for (var i=0; i < elem.childNodes.length; ++i) sTree(elem.childNodes[i],page , level+1);

}

}

Navegar na hierarquia de elementos do documento

A função que percorre

recursivamente a hierarquia de nós.

Para cada nó mostra o tipo e o nome

e o valor.

Se o nó for um elemento, mostra os

atributos e os nós filhos, invocando-

se a si própria.

Page 100: Javascript tutorial

Ultima actualização: 18-10-2011

throw expressão

Excepções sinalizam situações de falha e são iniciadas pela instrução throw. Uma

excepção modifica o fluxo normal de execução do programa, que continua no primeiro bloco catch que for encontrado no encadeamento de funções em que a excepção foi iniciada.

Caso não exista nenhum bloco de tratamento de excepções o script termina, típicamente com uma janela indicativa de erro

Exemplos:

throw "Erro de conversão";

throw 42;

Tratamento de excepções – a instrução throw

Page 101: Javascript tutorial

Ultima actualização: 18-10-2011

The try...catch statement marks a block of statements to try, and specifies a response should an exception

be thrown. If an exception is thrown, the try...catch statement catches it.

The try...catch statement consists of a try block, which contains one or more statements, and a catch

block, containing statements that specify what to do if an exception is thrown in the try block. That is, you

want the try block to succeed, and if it does not succeed, you want control to pass to the catch block. If any

statement within the try block (or in a function called from within the try block) throws an exception, control

immediately shifts to the catch block. If no exception is thrown in the try block succeed, the catch block is

skipped. The finally block executes after the try and catch blocks execute but before the statements

following the try...catch statement.

A instrução try

var undef;

try {

……

}

catch(e) {

alert("excepção: " + e);

}

try { instruções… }

[catch ( catchVar) { instruções…} ]

[finally { instruções…} ]

Page 102: Javascript tutorial

Ultima actualização: 18-10-2011

Os blocos catch, finally

The following example uses a try...catch statement. The example calls a function that

retrieves a month name from an array based on the value passed to the function. If the value

does not correspond to a month number (1-12), an exception is thrown with the value

"InvalidMonthNo".

function getMonthName (mo) {

// Adjust month number for array index (1=Jan, 12=Dec)

mo=mo-1;

var months= [

"Jan","Feb","Mar","Apr","May","Jun","Jul",

"Aug", "Sep", "Oct", "Nov", "Dec"];

if (months[mo] != null)

return months[mo];

else

throw "InvalidMonthNumber";

}

Page 103: Javascript tutorial

Ultima actualização: 18-10-2011

Bibliografia