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);            
   }
}