Mudar tecla digitada em Java Script

8 respostas
R

Pessoal,

To com o seguinte problema em uma função java script:

function TrataTeclasDigitadas(evento)
{

	var teclaPress = evento.keyCode  ? evento.keyCode  :
					 evento.charCode ? evento.charCode :
				     evento.which    ? evento.which    : void 0;

    var faixaIni = 0;
    var faixaFim = 255;

    if( (teclaPress >= faixaIni) && (teclaPress <= faixaFim)){

		return true;
	}
	else{

		evento.keyCode = 191;
		evento.CharCode = 191;
		evento.which = 191;

		return true;

		
	}

	 return true;		
	
}

Quando uma tecla é pressionada, a função pega o codigo asc dela e verifica se está na faixa de 0 a 255 (Padrão Ascii). Se o codigo não tiver na faixa definida, o carctere não pode ser digitado e em seu lugar eu tenho que colocar outro carctere. No caso, estou colocando o 191.

O problema é que isso funciona o IE mas no Firefox não ta funcionado. Alguem sabe como resolver esse problema???

8 Respostas

L

Tente assim

if (evento.srcElement) evento.keyCode = 191; else if (evento.target) evento.which = 191;

evento.charCode eu nunca usei.

R

Então, ja tentei dessa forma, mas o Firefox não interpreta isso…

L

Há desculpe foi erro meu. Dessa forma você vai estar setando no evento. Na verdade você tem que setar no campo.

if (evento.srcElement)  
    keycode = evento.keyCode;  
else if (evento.target)  
    keycode = evento.which;  


campo.value = String.fromCharCode(keycode);

Não testei mas tem grande chance de funcionar.

R

O problema é o seguinte, essa função é usada no onKeypress de um campo de texto. Eu não posso dar um campo.value = String.fromCharCode(keycode); porque isso iria substituir todo o testo que ja existe no campo. Na verdade eu preciso substituir o ultimo caractere digitado.

L

é Só ao invês de fazer

campo.value = String.fromCharCode(keycode);

você pode fazer:

campo.value = campo.value + String.fromCharCode(keycode);

ai você vai criar um novo problema porque dessa forma você só concatena o valor no final, se o usuário usar as teclas de navegação ou clicar em outra posição o valor digitado sempre ficará no final. Ai é outra lógica.

R

É, realmente dessa forma funciona. Mas tambem não posso concatenar no final. Esse campo é de texto livre onde o usuário informa o texto para ser gravado no banco. Mas não posso deixar o ususario informar valores que o banco não vai aceitar. Tipo, se digitar um caracter fora da faixa válida, ele substitui o carctere por outro que podera ser gravado no banco.

L

Cara ao invês de substituir enquanto o usuário digita você pode no submit substituir todos os caracters invalidos por espaço em branco.

tipo

campo.value.replace(/[caracteres invalidos]/g, “”);

L

Só que dessa forma tem um problema o cara ainda pode dar um jeito de burlar o seu javaScript para inserir caracteres inválidos.

Então é melhor você substituir os caracters inválidos depois de submeter.

Criado 6 de maio de 2010
Ultima resposta 6 de mai. de 2010
Respostas 8
Participantes 2