Olá,
Os navegadores web adoram me atormentar.
Estou fazendo uma biblioteca que inclui funções Javascript a serem executadas, mas ao que parece a diferença de comportamento dos navegadores (IE e Firefox principalmente), me causa problemas não muito triviais.
O caso é a ordem de execução (disparo) dos eventos relacionados aos campos de um formulário HTML.
Fiz um teste com o seguinte HTML e o resultado foi assim. Executei a seguinte seqüência de eventos:
Clique com o mouse sobre o campo
Digitei o número 1
Clique com o mouse fora do campo
HTML:<html>
<head>
<script language="JavaScript" type="text/javascript">
function show(msg) {
document.getElementById("eventos").value += msg + "\n";
}
</script>
</head>
<body>
<form name="frm">
<input type="text" name="cpf" onclick="show('click');" onkeydown="show('keydown');"
onkeyup="show('keyup');" onkeypress="show('keypress');"
onchange="show('change');" onblur="show('blur');"
onfocus="show('focus');" id="cpf">
<hr/>
<textarea id="eventos" name="eventos" rows="15" cols="10"></textarea>
</form>
</body>
</html>
Resultado IE:
focus
click
keydown
keypress
keyup
change
blur
Resultado Firefox:
focus
click
keydown
keypress
keyup
blur
change
Os navegadores executem os eventos BLUR/CHANGE em ordem inversa, comportamento que pode dar um resultado inesperado para o meu sistema, dependendo do navegador.
O problema maior é que, nesta biblioteca que estou criando, posso adicionar funções Javascript para tratamento dos campos como, por exemplo, formatação. Trabalhar com navegadores diferentes vai me causar problemas, pois posso lidar com valores diferentes dependendo do navegador, pois ele pode executar um tratamento do valor antes ou depois de ele ter sido formatado. Que lástima!
Alguém sugere alguma solução?