Blog

Manipulador de eventos no JavaScript

Quinta-feira, 12 de Abril, 2007 | 13 comentários

Recentemente tenho desenvolvido alguns formulários mais elaborados e não poderia de deixar registrado aqui esta dica. Pretendo escrever uma série de artigos relacionados com o dia-a-dia de um desenvolvedor Web.

Para quem vive trabalhando com formulários e suas validações, o uso de manipuladores de eventos com JavaScript pode ajudar na produtividade geral e trazer alguns benefícios diretos.

Se você já sabe do que se trata eventos, pule para a seção Eventos na prática. Caso contrário recomendo ler "O que são eventos?".

O que são eventos?

Eventos ou events são comportamentos de ações dos visitantes sobre um determinado elemento de uma página. Quando um usuário visita uma página e interage (clicando, digitando, movendo, etc.), está produzindo eventos.

Existem diversos eventos definidos para uso com JavaScript. Alguns são para uso restrito com algum elemento xHTML, como o caso do onSubmit que é usado somente com o elemento form. Abaixo listo alguns eventos principais (veja uma lista mais extensa):

Evento Executado quando...
onBlur ...o elemento perde o foco
onChange ...o elemento muda de valor
onClick ...o usuário clica sobre o elemento
onFocus ...o elemento é focado
onKeyPress ...o usuário pressiona alguma tecla sobre o elemento
onLoad ...o elemento é carregado por inteiro
onMouseOver ...o usuário move o ponteiro do mouse sobre o elemento
onMouseOut ...o usuário retira o ponteiro do mouse do elemento
onSubmit ...o elemento (formulário) é submetido

Eventos na prática

Os eventos podem ser usados de forma inline, ou de forma externa, com o uso de algum manipulador de eventos.

Eventos inline

Na primeira forma, você define tudo diretamente na tag do elemento. Veja um exemplo:

<form onsubmit="javascript:alert(this.a.value);return false;">
	<input type="text" name="a" onkeyup="javascript:this.value=this.value.toUpperCase();" />
	<input type="submit" />
</form>

No exemplo acima foram definidos 2 eventos: onSubmit para o formulário e o onKeyUp para um campo do formulário. Se você precisa alterar depois alguma propriedade deste evento, deverá editar diretamente no código do seu formulário.

Utilizando manipulador de eventos

Uma outra maneira prática é com uso de manipuladores, criados afim de tornar o código mais flexível e organizado.

Neste exemplo uso o event listener criado por Carlos R. L. Rodrigues, que adiciona ou remove um evento sobre qualquer elemento. São disponibilizadas 2 funções:

addEvent(object: Object, event: String, handler: Function(e: Event): Boolean, [scope: Object = object]): Boolean
Adiciona uma função que será disparada quando ocorrer determinado evento no objeto.
removeEvent(object: Object, event: String, handler: function(e: Event): Boolean, [scope: Object = object]): Boolean
Remove um listener previamente adicionado em um objeto e retorna true em caso de sucesso.

Veja a seguir um exemplo com uso da função addEvent:

<script type="text/javascript" src="/path/to/event-listener.js"></script>

<form>
	<input type="text" name="a" />
	<input type="submit" />
</form>

<script type="text/javascript">
var f = document.forms[0];
addEvent(f, "submit", function( e ) { alert(f.a.value);return false; });
addEvent(f.a, "keyup", function( e ) { f.a.value=f.a.value.toUpperCase(); });
</script>

Toda a validação fica externa ao formulário. Desta forma, você também pode inserir tal validação num arquivo JavaScript externo. Neste caso, devo atentar que você precisará carregar o arquivo externo depois do elemento a ser modificado ou, caso deseje incluir no head da página, declare a execução apenas quando a página carregar completamente (com uso do evento onLoad), caso contrário o objeto não será encontrado.

Você ainda pode definir uma função e passar como parâmetro no addEvent (no exemplo acima foi criado uma função inline para demonstração).

Da mesma forma que adicionei os eventos à um formulário, poderia também adicionar numa janela (window), num documento (document), etc.

Flexibilidade e organização

Como afirmado, um dos grandes benefícios com o uso do event listener é a flexibilidade nas alterações posteriores e a organização do código xHTML.

Até a próxima dica da série dia-a-dia de um desenvolvedor Web!

Nota importante:
Este Blog foi descontinuado em 2010, mas o mantive apenas como "arquivo".
Os posts são antigos e pode não refletir os modelos de desenvolvimento atuais.

13 comentários:

Lauro Becker disse:

Olá, Ciro!

Primeiramente, parabéns pelo artigo!

Segundamente... hehe
Qual a vantagem de usar desta forma e não assim:
--
var f = document.forms[0];
f .onsubmit = function(){
//blá blá blá
}
--

Na minha concepção, é bem mais claro desta forma.

Forte abraço!  ;-)

Ciro Feitosa disse:

Lauro,

Você pode realmente usar desta forma. Mas o foco desse meu artigo foi demonstrar um <em>event listener</em>, que pode ser útil em algumas situações adversas.

Abraço!

Fill disse:

Fala ciro, acompanho seu blog faz muito tempo mas esta é a primeira vez que eu comento nele  ;) Gostei muito do artigo apesar de ja conhecer um pouco deste assunto.
Agora que eu me lembre o asEvent so funciona com com a lib addEvent.js não é não? No IE ela não funciona muito bem, eu normalmente uso obj.event = function() { ... } existe alguma contra-indicação? Flw abraço

Leonardo Ribeiro disse:

Ciro,

Primeiro parabéns pelo artigo,
Você sabe que esse não é meu foco de atividade, mas é sempre bom está lendo sobre assuntos adversos.
Bom vou ficar aguardando seus registros sobre o dia a dia de um desenvolvedor!

Abraço meu amigo.

Jonas Raoni disse:

> Qual a vantagem de usar desta forma e não assim:
> f .onsubmit = function(){ //blá blá blá }

Imagine que vc queira chamar a funcao A e B no onsubmit:

f.onsubmit = funcaoA;
f.onsubmit = funcaoB;

Ao ocorrer o submit, so sera chamado a \\

Emanuelly disse:

vc sabe como eu faço pra eu excluir meu uol k?

kakaroto disse:

muito boa essa materia ciro ,eu tava procurando isso a um tempo para tira os onclick da vida dos link
muita clara e objectiva parabens ciro

kakaroto
http://www.obsidian.com.br

IVO LUIS disse:

Ciro,

Estou tendo um problema com o javaScript, nao consigo abril meu e-mail do msn, ele da a seguinte mensagem me ajude..

É necessário o JavaScript para entrar no Windows Live ID. Este navegador não oferece suporte ao JavaScript ou os scripts estão sendo bloqueados.

Para saber se o navegador oferece suporte ao JavaScript ou para permitir a execução de scripts, consulte a ajuda online do navegador.
Grato

Ivo

Fábio disse:

Ola, estou com uma duvida, ou sei la eu o que é...
mas é o seguinte, tenho uma função:
Cod....

function submitForm(){
var f= document.formsCadastro;
f.submit();
}

Com isso ele vai enviar os dados do formulário, para um iframe, logo a pagina atual não vai atualizar.
Ai vem o problema!!! quero limpar o form após o envio dos dados... sem ter que clicar em um botão ou algo assim.
quero que depois de enviar os dados, o javascript limpe esse formulário pra mim.

Ficarei muito grato se puderem me ajudar.

Raquel disse:

to com um problema no pc, e que nao to consiguindo aceita meus amigos no orkut nem colok comnetarios nas fotos dos meus amigos, nem salvar oq eu coloco no meu orkut da sempre um erro que é javascrip:void(0).


fico muito garta se puder me ajudar!

Andre disse:

Cara, dica muito util. Os listeners são muito uteis num caso por exemplo, de um campo/combo que você nao pode usar a chamada inline... muito bom.

André

Rodrigo Daniel disse:

Otimo artigo, muito util para programação orientada a objetos, onde temos que alterar as funções de alguns elementos em modo de execução.
Já para o Amigo Fábio que tem dúvidas em como tratar o formulario com iframe, basta adicionar a seguinte função no seu arquivo que recebe os dados no iframe: parent.document.getElementByTagName['form'][0].reset();

Karina disse:

Ja tem meses que eu tento pedir ajuda no sac e na bol.Meu uolk parou de adicionar amigos.Diz que da erro e que tente novamente.Eu tento todos os dias e nada.Quero ajuda:Como faço para voltar a adicionar amigos.

Comente:





Comentário enviado!