Existem muitos códigos para bloqueio de teclas na internet, mas esse é um pouco mais completo.
A principal idéia é ser personalizável.
/* 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; }