yo ocupo estas funciones en onkeyUp
function decimales(obj)
{
var entero;
var lastdato;
var puntdec;
for(var i=obj.value.length-1;i>=0;i--)
{
puntodec=0;
lastdato=obj.value.charAt(i);
entero=parseInt(lastdato);
for(var j=0;j<obj.value.length;j++)
if(obj.value.charAt(j) == '.')
puntodec++;
if(isNaN(entero) && lastdato != '.' && lastdato != '-')
obj.value = obj.value.substring(0,obj.value.length-1);
if(lastdato == '.' && puntodec > 1)
obj.value = obj.value.substring(0,obj.value.length-1);
if(lastdato == '-' && i != 0)
obj.value = obj.value.substring(0,obj.value.length-1);
}
}
function enteros(obj)
{
var entero;
var lastdato;
var puntdec;
for(var i=obj.value.length-1;i>=0;i--)
{
puntodec=0;
lastdato=obj.value.charAt(i);
entero=parseInt(lastdato);
for(var j=0;j<obj.value.length;j++)
if(obj.value.charAt(j) == '.')
puntodec++;
if(isNaN(entero) && lastdato != '-')
obj.value = obj.value.substring(0,obj.value.length-1);
if(lastdato == '-' && i != 0)
obj.value = obj.value.substring(0,obj.value.length-1);
}
}