Caros,
Estou com um "grave" problema com Javascript e eventos relacionados ao formulário HTML. Fiz umas funções para, automaticamente, formatar campos e evitar digitação de caracteres não numéricos. Porém estou tendo um problema com relação a isto. Olhem o código que eu explico o que é.
HTML:<input type="text" name="cnpj" maxlength="14" size="18"
onkeypress="avoidNotNumber(this,event);" onblur="maskCnpj(this);"
onfocus="unmask(this);" onchange="doSomething();">
function maskCnpj(e) {
// mascara o CNPJ no campo
}
function unmask(e) {
// tira a máscara do texto do campo
}
function doSomething() {
// faz algo
}
var v_elem_obj = null;
function avoidNotNumber( elem, evt ) {
// se a tecla tab foi pressionada, ignora (corrige problema com Firefox)
if( isTabKeyPressed(evt) ) {
return;
}
v_elem_obj = elem;
setTimeout("execAvoidNotNumber()",1);
// a execução do timeout acima causa problema no navegador Firefox, pois
// a formatação fica comprometida quando o foco do campo é perdido pelo
// pressionamento da tecla TAB (28/11/2007)
//TODO: a execução deste método acima por timeout ocasiona o seguinte erro:
// o evento "onchange" não é executado no campo, pois ele acaba sendo
// ofuscado pela alteração do valor do campo via javascript. SOLUCIONAR!
}
function execAvoidNotNumber() {
v_elem_obj.value = removeNonDigits(v_elem_obj.value);
}
function removeNonDigits(e) {
// remove do campo os caracteres que não são dígitos
}
Quando o campo perde o foco, o evento onChange não é executado quando deveria, pois o método de não permitir não-numéricos (avoidNotNumber) durante a digitação é executado via timeout, causando problemas com isso.
Parece que, por algum motivo, pelo Javascript alterar o conteúdo do campo, ele ignora o evento onchange.
Alguém vê alguma solução?