segunda-feira, 25 de janeiro de 2010

Como Cancelar um Evento em Javascript para Elementos Sobrepostos

Algumas vezes atribuímos o mesmo tipo de evento para elementos HTML que estão sobrepostos visualmente e isto gera concorrência. Algumas vezes queremos definir qual destes eventos será acionado e qual não será.

Por exemplo, veja a lista abaixo:



Vamos supor que ela foi composta com uma DIV com uma UL dentro:





Vamos supor que queremos que, ao clicar em um item da lista LI, este se torne azul claro, indicando que está selecionado. Mas queremos que quando o usuário clique na área branca da DIV, nenhum elemento fique mais selecionado. Neste caso, devemos definir o evento onclick dos itens da lista e um outro evento onclick para a DIV. Porém, como os itens estão dentro da DIV, quando o usuário clicar no item, este clique será transferido também para a DIV. A consequência disso é que será chamada a rotina para selecionar o item mas, logo em seguida, será chamada a rotina para desselecionar. Como resolver esse tipo de problema?

Simples: no evento onclick, definir o método que será chamado:




E...




A função Seleciona() será acionada antes da Desseleciona() porque os itens LI são exibidos por cima da DIV. E agora, na função Seleciona(), deve se inserir o código abaixo que irá cancelar a chamada ao evento da DIV ou qualquer outra subsequente.

155:  function Seleciona(event) {
156:    if (typeof event.stopPropagation != "undefined") {
157:      event.stopPropagation();
158:    }
159:    if (typeof event.cancelBubble  != "undefined") {
160:      event.cancelBubble = true;
161:    }
162:  }

 Pronto!

Obs: somente testado no IE e no Firefox. O primeiro IF é para o padrão Firefox, o segundo é para o padrão IE.

Obs: a palavra "desseleciona" não existe :P

Obs: para quem não sabe, event é uma palavra reservada que indica o objeto manipulador do evento em questão.

segunda-feira, 18 de janeiro de 2010

Função para Verificar se Alguém É Maior de Idade

<?php

function MaiorIdade($data_nasc) {
  list($dia_nasc, $mes_nasc, $ano_nasc) = explode("/", $data_nasc); 
  list($dia_hoje, $mes_hoje, $ano_hoje) = explode("/", date("d/m/Y", time()));
  return mktime(23, 59, 59, $mes_nasc, $dia_nasc, $ano_nasc) < 
         mktime(00, 00, 00, $mes_hoje, $dia_hoje, $ano_hoje - 18);
}

$data = "25/10/1977";
echo "Quem nasce em $data e " . (MaiorIdade($data) ? "maior" : "menor") . " de idade";

?>