Pessoal, to com um problemana minha aplicação…
chegou a hora de mascarar uns componentes texto e tudo mais, do jeito que estou fazendo ainda não obtive êxito…
lá vai o que eu estou fazendo…
estou tentando mudar um combo e logo após selecionar qualquer valor no combo quero setar o valor do evento onkeypress de um textfield, colocando nesse evento a função que me servirá de máscara.
então, como estou usando jsf, o bean da minha página seta este onchange para o meu combo:
String autoSelectCondicao = "resolveMascaras(document.getElementById('"
+ idComboCampos + "'), document.getElementById('" + idInputLocaliza + "'), " +
"document.getElementById('" + idInputAte + "'), arrayTipos);";
this.comboCampos.setOnchange(autoSelectCondicao);
onde idComboCampos é o id do combo que vai ser mudado, idInputLocaliza é o id do primeiro input a ser mascarado e idInputAte é o id do segundo input e arrayTipos é um array com valores de acordo com as opcoes do comboCampos.
por exemplo,
valor comboCampos:
arrayTipos[0] - CHARSET
arrayTipos[1] - NUMERO;
…
então pessoal, depois de ter setado aquele evento onchange, a function javascript resolveMascaras com 4 parametros e outras funções são listadas abaixo, na ordem em que são executadas:
function resolveMascaras(comboField, inputLocaliza, inputAte, arraytipos){
// esse function compara o tipo de dados que o combo representa com o
// arrayTipos:
// se é charset faz uma mascara, se for numero outra, se for data, faz
// outra.
if(arrayTipos[comboField.selectIndex] == 'CHARSET'){
inputAte.onKeyPress("mascara(this, mascCharset);");
} else {
if(arrayTipos[comboField.selectIndex] == 'NUMERO'){
inputAte.onKeyPress("mascara( this, mascNumero)");
}
else {
if(arraytipos[comboField.selectIndex] == 'DATA'){
inputAte.onKeyPress = mascara(inputAte, mascData)
inputLocaliza.onKeyPress = mascara(inputLocaliza,mascData)
}
}
}
}
function mascara(o,f){
v_obj=o
v_fun=f
setTimeout("execmascara()",1)
}
function execmascara(){
v_obj.value=v_fun(v_obj.value);
}
ignorem as outras máscaras.
function mascData(v){
v=v.replace(/\D/g,""); //Remove tudo o que não é dígito
v=v.replace(/(\d{2})(\d)/,"$1/$2"); //Coloca um ponto entre o terceiro e o quarto dígitos
v=v.replace(/(\d{2})(\d)/,"$1/$2"); //Coloca um ponto entre o terceiro e o quarto dígitos //de novo (para o segundo bloco de números)
// v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2"); //Coloca um hífen entre o terceiro e o quarto dígitos
return v;
a questão grande é…
a expressão para setar um evento onkeypress em tempo de execução por javascript é assim? --> inputLocaliza.onKeyPress = mascara(inputLocaliza,mascData)
outra questão:
se a resposta pra pergunta acima é “sim”, pq entao meu codigo nao funciona?