Te pongo el código que usé hace un tiempo para hacer algo como lo que comentas. Te permite introducir solo números pero a la vez te permite hacer uso de teclas comunes como suprimir, tab, etc... evitando los problemas que conlleva no poder usarlos en un campo.
Código:
function validarNum(e){
tecla_codigo = (document.all) ? e.keyCode : e.which;
if(tecla_codigo==8){
return true;
}
else if (tecla_codigo == 0){
return true;
}
else {
patron = /[0-9]/;
tecla_valor = String.fromCharCode(tecla_codigo);
return patron.test(tecla_valor);
}
}