/*
Função para limitar o uso de teclas desnecessárias em certos campos.
Não implementei a permissão dos caracteres alfabéticos, pois, o uso principal dessa função é em campos onde só se pode digitar
números. Mais não a nada que impeça sua codificação mais tarde.
IMPORTANTE
A função deve ser chamada no evento ONKEYDOWN, pelo seguinte motivo:
O IE só valida os digitos por keyCode no evento onkeydown, no evento onkeypress a validação é feita por caracter ascii.
Com isso não possível validar por exemplo as teclas de setas, home, end, etc.
Para termos o código dessas teclas, a função tem de ser chamada no evento onkeydown.
Outra coisa importante, no evento onkeydown onde a validação é feita por keyCode, as teclas numéricas do teclado alfa, e do teclado numérico
são diferentes: Por exemplo, o "1" do teclado alfa, ou seja, que está em cima do "Q", tem o código 49,
já no teclado numérico esse código é 105.
É por isso que quando a função era chamada no evento onkeypress, letras eram liberadas, pois nesse evento a validação é feita pelo caractere ascii, e nesse caso
o código referente ao "1" dos dois teclados é o mesmo, 49.
O parâmetro strPermitidas é usado para liberação de outras teclas, como por exemplo a tecla do "." e da ",".
No evento onKeyDown de um textbox por exemplo.
- Deve permitir números, "." e ",".
onkeydown="javascript:PermitirCaracteres(event, true, '188,190,110,194');"
*/
function PermitirCaracteres(objEvento, blnNumeros, strPermitidas)
{
var objFrameWork = new LEBJSFrameWork()
var lngCaracter = 0;
var strCaracter = '';
var blnRetorno = false;
var blnTeclaControl = false;
var blnTeclaShift = false;
// Recuperando o keyCode da tecla.
if(objEvento.keyCode)
{
lngCaracter = objEvento.keyCode;
}
else if(objEvento.which)
{
lngCaracter = objEvento.which;
}
else if(objEvento.charCode)
{
lngCaracter = objEvento.charCode;
}
else
{
lngCaracter = void(0);
}
// Valor booleano que indica se as teclas Shift e/ou Control estão pressionadas.
blnTeclaControl = objEvento.ctrlKey;
blnTeclaShift = objEvento.shiftKey;
// Permitir o uso de CTRL com as teclas C, V, X e A.
strCaracter = String.fromCharCode(lngCaracter).toUpperCase();
var objExpressaoRegular = /^[CVXA]$/;
if(blnTeclaControl && objExpressaoRegular.test(strCaracter))
{
blnRetorno = true;
}
/*
Permissão de teclas pré-definidas para liberdade de navegação dentro do campo:
8 - Backspace
9 - TAB
45 - Insert
46 - Delete
36 - Home
35 - End
37 - Seta Esquerda
39 - Seta Direita
Vou validar estas teclas separadamente, pois algumas teclas requerem certas particularidades.
O Backspace pode ser utilizado sozinho ou com em conjunto com o CTRL.
*/
if((!blnTeclaShift) && lngCaracter == 8)
{
blnRetorno = true;
}
// O Insert e o Delete não podem ser usados em combinação com outras teclas.
var objExpressaoRegular = /^(45|46)$/;
if((!(blnTeclaControl || blnTeclaShift)) && objExpressaoRegular.test(lngCaracter))
{
blnRetorno = true;
}
// As outras teclas podem ser usadas sem restrições.
var objExpressaoRegular = /^(9|35|36|37|39)$/;
if(objExpressaoRegular.test(lngCaracter))
{
blnRetorno = true;
}
/*
Permitir caracteres numéricos.
O tratamento do tipo boolean:
Permitir o acesso a função somente se o valor da variável for True.
O tratamento de tecla Shift pressionada.
Restringir a digitação de !@#$%¨&*().
O tratamento da tecla CTRL pressionada.
Restringir no IE 7 a mudança de abas.
*/
if(blnNumeros && typeof(blnNumeros) == 'boolean')
{
var objExpressaoRegular = /^(4[8-9]|5[0-7]|9[6-9]|10[0-5])$/;
if((!(blnTeclaShift || blnTeclaControl)) && objExpressaoRegular.test(lngCaracter))
{
blnRetorno = true;
}
}
// Permitir outras teclas informadas pelo programador, como por exemplo, virgulas e pontos.
if(!objFrameWork.pIsEmpty(strPermitidas))
{
strPermitidas = strPermitidas.replace(/\s/g, '');
strPermitidas = strPermitidas.replace(/^[,]|[,]$/g, '');
if(!objFrameWork.pIsEmpty(objFrameWork.pTrim(strPermitidas)))
{
var arrPermitidas = strPermitidas.split(',');
for(var i = 0; i <= arrPermitidas.length; i++)
{
if((!blnTeclaShift) && lngCaracter == arrPermitidas[i])
{
blnRetorno = true;
break;
}
}
}
}
// Caso a tecla ou combinação de teclas seja permitida, sai da função.
if(blnRetorno)
{
return blnRetorno
}
try
{
objEvento.returnValue = false;
objEvento.cancelBubble = true;
if(document.all)
{
objEvento.keyCode = 0;
}
else
{
objEvento.preventDefault();
objEvento.stopPropagation();
}
}
catch(err)
{
}
return blnRetorno;
}